Назначить результаты глобализации переменной в Bash

Мой коллега, Райан, пришел ко мне с ошибкой в ​​своем сценарии 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

Из этого я делаю вывод, что подстановка происходит во время команды echo, а не когда создается переменная FOO.

У нас есть пара обходных путей в порядке убывания непривлекательности:

touch `echo $FOO`/rotten_eggs

Или:

pushd
cd $FOO
touch rotten_eggs
popd

Но ни один из них не удовлетворителен. Я упустил фокус?

28
задан Rob Fisher 10 February 2012 в 15:09
поделиться