我有简单的bash脚本find.sh来查找文件
==>cat find.sh
echo $1
find -name $1
但有时它没有采用正确的参数,而是采用固定的参数
例如
find.sh 'ECSv2_P_TCP_FUNC_060*'
ECSv2_P_TCP_FUNC_060 ECSv2_P_TCP_FUNC_060.backup
虽然我已通过'ECSv2_P_TCP_FUNC_060 *',但它已将ECSv2_P_TCP_FUNC_060 ECSv2_P_TCP_FUNC_060.backup作为参数。
为什么会这样? 以及如何避免这种情况?
答案 0 :(得分:5)
您还需要保护*字符不受脚本内部shell扩展的影响:
echo "$1"
find . -name "$1"
(编辑为包含当前目录作为查找的参数。)
答案 1 :(得分:1)
你的脚本确实接受了这个参数,但是脚本在将它传递给echo之前扩展了*,find正在读取参数并解释*。 (实际上,发现可能是轰炸,因为第一个争论应该是一个目录。例如,'find.-name $ 1')