bash脚本采用固定参数值,而不是实际传递的参数值
我有一个简单的bash脚本find.sh来查找文件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正在读
==>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,则不同。使用GNUfind
和当前目录中名为“foo.txt”的现有文件以及该文件下名为“foo.txt.bak”的子目录,再加上两个级别的一些其他文件,比较find foo.*
,find“foo.*”,
find。“foo.*”,
find-名称为“foo.*”,
find-命名为“foo.*`和find-名称foo.*
。