Мой коллега, Райан, пришел ко мне с ошибкой в его Баш скрипт, и я определил проблемы с этим испытанием:Присвоить результаты подстановка переменной в 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
Из этого я делаю вывод, что globbing происходит во время команды echo, а не при создании переменной FOO.
У нас есть несколько обходных путей, в порядке убывания ungracefulness:
touch `echo $FOO`/rotten_eggs
Или:
pushd
cd $FOO
touch rotten_eggs
popd
Но ни один не удовлетворяет. Мне не хватает трюка?
Спасибо, это объясняет это красиво. –
Это совсем не проблема. Проблема заключается в том, что bash присваивает glob переменной перед расширением. Даже если файл существует, для переменной будет привязан глобус, а не имя файла; и что glob будет расширен при использовании –
@SamLiddicott Пример OP работал бы, если бы существовал «rotten_eggs», поэтому проблема была более или менее. Время расширения шара не актуально в коротком примере OP. – jordanm