0 bash find sh quoting string-substitution
我试图传递一个引用的globbing模式来使用变量在脚本中查找命令.没有eval就行不通.这是没有eval的方法吗?
首先,我使用followin命令:
find . -name '*a*'
Run Code Online (Sandbox Code Playgroud)
它工作正常并产生以下输出:
./AaA
./dir1/aaa.tst
./dir1/zabc1122333.tst
./dir2/dir3/zabc1122333.tst
./yyy/AaA
./zabc1122333.tst
Run Code Online (Sandbox Code Playgroud)
现在我想用一个变量来代替引用的glob模式' a '.
这不起作用:
A='*a*' ; find . -name $A
Run Code Online (Sandbox Code Playgroud)
它产生:
find: zabc1122333.tst: unknown primary or operator
Run Code Online (Sandbox Code Playgroud)
以下四个命令也不起作用.他们什么都没有:
A="'*a*'" ; find . -name $A
A=\'\*a\*\' ; find . -name $A
A=\'*a*\' ; find . -name $A
A='\*a\*' ; find . -name $A
Run Code Online (Sandbox Code Playgroud)
最后它适用于eval:
A=\'\*a\*\' ; eval find . -name $A
./AaA
./dir1/aaa.tst
./dir1/zabc1122333.tst
./dir2/dir3/zabc1122333.tst
./yyy/AaA
./zabc1122333.tst
Run Code Online (Sandbox Code Playgroud)
没有评估可以做到吗?
使用引号(")来防止bash浮出水面.
A='*a*'; find . -name "$A"
Run Code Online (Sandbox Code Playgroud)
查看以下两个命令的输出.
A='*a*'; echo find . -name $A
Run Code Online (Sandbox Code Playgroud)
和
A='*a*'; echo find . -name "$A"
Run Code Online (Sandbox Code Playgroud)