Смущает комбинация подстановок, подстановки переменных и команды find в bash - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь передать шаблон с кавычками, чтобы найти команду в скрипте, используя переменную.Не работает без Eval.Это способ сделать это без eval?

Сначала я использую команду followin:

find . -name '*a*'

Она работает нормально и выдает следующий вывод:

./AaA
./dir1/aaa.tst
./dir1/zabc1122333.tst
./dir2/dir3/zabc1122333.tst
./yyy/AaA
./zabc1122333.tst

Теперь я хочу использовать переменную вместо цитируемого шаблона глобуса ' a '.

Это не работает:

A='*a*' ; find . -name $A

Это производит:

find: zabc1122333.tst: unknown primary or operator

Следующие четыре команды также не работают.Они ничего не производят:

A="'*a*'" ; find . -name $A

A=\'\*a\*\' ; find . -name $A

A=\'*a*\' ; find . -name $A

A='\*a\*' ; find . -name $A

Наконец-то это работает с eval:

A=\'\*a\*\' ; eval find . -name $A

./AaA
./dir1/aaa.tst
./dir1/zabc1122333.tst
./dir2/dir3/zabc1122333.tst
./yyy/AaA
./zabc1122333.tst

Возможно ли это сделать без eval?

1 Ответ

0 голосов
/ 27 января 2019

Используйте кавычки (") для предотвращения сбоев в bash.

A='*a*'; find . -name "$A"

Посмотрите на вывод следующих двух команд.

A='*a*'; echo find . -name $A

и

A='*a*'; echo find . -name "$A"
...