我正在尝试传递一个引号括起来的模式以使用变量在脚本中查找命令。没有评估就无法工作。这是一种无需评估的方法吗?
首先,我使用以下命令:
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
是否可以在没有评估的情况下做到?
答案 0 :(得分:6)
使用引号("
)防止bash泛滥。
A='*a*'; find . -name "$A"
查看以下两个命令的输出。
A='*a*'; echo find . -name $A
和
A='*a*'; echo find . -name "$A"