mój kolega, Ryan przyszedł do mnie z błędu w swoim skrypcie bash, a ja zidentyfikowany problem z tym teście:Przypisywanie wyniki globbing do zmiennej w bash
$ mkdir ryan
$ mkdir ryan/smells-bad
$ FOO=ryan/smells-*
$ echo $FOO
ryan/smells-bad
$ touch $FOO/rotten_eggs
touch: cannot touch `ryan/smells-*/rotten_eggs': No such file or directory
Z tego wnoszę, że globbing dzieje się podczas polecenia echa, a nie gdy tworzona jest zmienna FOO.
Mamy kilka obejścia, w porządku malejącym ungracefulness:
touch `echo $FOO`/rotten_eggs
czyli
pushd
cd $FOO
touch rotten_eggs
popd
ale nie jest satysfakcjonujące. Czy brakuje mi jakiejś sztuczki?
Dzięki, to ładnie to wyjaśnia. –
To nie jest problem w ogóle. Problem polega na tym, że bash przypisuje glob do zmiennej przed rozwinięciem. Nawet jeśli plik istnieje, do zmiennej zostanie przypisany glob, a nie nazwa pliku; i że glob będzie rozszerzony na użycie –
@SamLiddicott Przykład z OP działałby, gdyby istniało "rotten_eggs", więc był to mniej więcej problem. Czas rozwinięcia globu nie jest istotny w krótkim przykładzie OP. – jordanm