bash脚本采用固定参数值而不是实际传递的值

时间:2011-02-07 10:15:12

标签: bash shell command-line-arguments

我有简单的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作为参数。

为什么会这样? 以及如何避免这种情况?

2 个答案:

答案 0 :(得分:5)

您还需要保护*字符不受脚本内部shell扩展的影响:

echo "$1"
find . -name "$1"

(编辑为包含当前目录作为查找的参数。)

答案 1 :(得分:1)

你的脚本确实接受了这个参数,但是脚本在将它传递给echo之前扩展了*,find正在读取参数并解释*。 (实际上,发现可能是轰炸,因为第一个争论应该是一个目录。例如,'find.-name $ 1')