Proponuję zagłębić się trochę w manual basha - po polsku jest - i poszukać. Sam pewnie bym zrobił to z ciekawości, ale mam masę innych ciekawych rzeczy, również z tą powłoką, do zrobienia, choćby opanować sposób na łatwe wyposażanie poleceń w zbiory możliwych dopełnień (np. ich opcji czy plików z odpowiednimi rozszerzeniami) i też czeka mnie trochę jazdy z podręcznikiem i eksperymentów.
Na podobieństwo zapuść sobie polecenie
for i in /bin/*; do echo ${i##@(/bin|/bin/z)}; done
raz z linii poleceń, raz w skrypcie. U mnie jest tak, że alternatywa "@( | )" działa w linii poleceń, a w skrypcie już nie. W skrypcie trzeba włączyć opcję extglob (
shopt -s extglob). Może u Ciebie jest jeszcze inna różnica ustawień. Aby to sprawdzić, odpal shopt bez parametrów raz ze skryptu, raz z linii poleceń.