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

bash脚本采用固定参数值,而不是实际传递的参数值,bash,shell,command-line-arguments,Bash,Shell,Command Line Arguments,我有一个简单的bash脚本find.sh来查找文件 ==>cat find.sh echo $1 find -name $1 但它有时不是采用正确的论点,而是采用固定论点 乙二醇 在这里,虽然我已经传递了“ECSv2_p_TCP_FUNC_060*”,但它已经将ECSv2_p_TCP_FUNC_060 ECSv2_p_TCP_FUNC_060作为参数进行备份 为什么会发生这种情况? 如何避免这种情况呢?您的脚本确实接受了参数,但是脚本在将*传递给echo之前扩展了*并且find正在读

我有一个简单的bash脚本find.sh来查找文件

==>cat find.sh

echo $1

find -name $1
但它有时不是采用正确的论点,而是采用固定论点

乙二醇

在这里,虽然我已经传递了“ECSv2_p_TCP_FUNC_060*”,但它已经将ECSv2_p_TCP_FUNC_060 ECSv2_p_TCP_FUNC_060作为参数进行备份

为什么会发生这种情况?
如何避免这种情况呢?

您的脚本确实接受了参数,但是脚本在将*传递给echo之前扩展了*并且find正在读取参数并解释*。(实际上,find可能是爆炸性的,因为第一个arguemnt应该是一个目录。例如,“find.-name$1”)

您的脚本确实接受了该参数,但脚本在将其传递给echo之前扩展了*,find正在读取该参数并解释*。(实际上,find可能是爆炸性的,因为第一个参数应该是目录。例如,“find.-name$1”)

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

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

(经过编辑以将当前目录作为find参数包含在内。)

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

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

(经过编辑,将当前目录作为find的参数包含在内。)

至少在GNU find中,手册页声明:“如果没有给出路径,则使用当前目录。”@Christoph Other finds将其视为语法错误。(BSD find当然有!)非常感谢!!将答案1和答案2结合起来解决了我的问题。我也不知道引用什么。指定directoy时必需。@克里斯托弗:如果参数是glob,则不同。使用GNU
find
和当前目录中名为“foo.txt”的现有文件以及该文件下名为“foo.txt.bak”的子目录,再加上两个级别的一些其他文件,比较
find foo.*
find“foo.*”,
find。“foo.*”
find-名称为“foo.*”
find-命名为“foo.*`和
find-名称foo.*
。至少在GNU find中,手册页声明:“如果没有给出路径,则使用当前目录。”@Christoph其他查找将其视为语法错误。(BSD find当然有!)非常感谢!!将答案1和答案2结合起来解决了我的问题。我也不知道引用什么。指定directoy时必需。@克里斯托弗:如果参数是glob,则不同。使用GNU
find
和当前目录中名为“foo.txt”的现有文件以及该文件下名为“foo.txt.bak”的子目录,再加上两个级别的一些其他文件,比较
find foo.*
find“foo.*”,
find。“foo.*”
find-名称为“foo.*”
find-命名为“foo.*`和
find-名称foo.*