Bash 使用命令和glob";回音-?“;?
如果我想匹配一个名为“-f”或“-r”的文件,我可以这样做Bash 使用命令和glob";回音-?“;?,bash,shell,zsh,glob,Bash,Shell,Zsh,Glob,如果我想匹配一个名为“-f”或“-r”的文件,我可以这样做 test.sh -? 如果我想将文本'-?'作为参数发送到程序,我可能会执行以下操作: test.sh -\? 如果不存在这样的文件“-f”或“-r”或类似文件,那么我的shell应该如何处理 test.sh -? 它是否应该告诉我没有与此模式匹配的文件?如果不存在这样的模式,默认情况下,shell只返回您提供的模式,包括您使用的*或?字符。要确定文件是否实际存在,请测试它。因此,在脚本中,使用: [ -f "$1" ] ||
test.sh -?
如果我想将文本'-?'作为参数发送到程序,我可能会执行以下操作:
test.sh -\?
如果不存在这样的文件“-f”或“-r”或类似文件,那么我的shell应该如何处理
test.sh -?
它是否应该告诉我没有与此模式匹配的文件?如果不存在这样的模式,默认情况下,shell只返回您提供的模式,包括您使用的
*
或?
字符。要确定文件是否实际存在,请测试它。因此,在脚本中,使用:
[ -f "$1" ] || echo "no such file exists"
如果不存在这样的模式,默认情况下,shell只返回您给出的模式,包括您使用的
*
或?
字符。要确定文件是否实际存在,请测试它。因此,在脚本中,使用:
[ -f "$1" ] || echo "no such file exists"
您似乎正在寻找
nullglob
选项,至少在Bash中是这样:
shopt -s nullglob
如果没有
nullglob
选项,一个不匹配的模式将作为其文本自身传递给您的程序:如果没有匹配的文件,shell将-?
传递给脚本。使用nullglob
选项,不匹配的模式将被完全替换为零。您似乎正在寻找nullglob
选项,至少对于Bash:
shopt -s nullglob
如果没有
nullglob
选项,一个不匹配的模式将作为其文本自身传递给您的程序:如果没有匹配的文件,shell将-?
传递给脚本。使用nullglob
选项,不匹配的模式将被完全替换为零。在bash
中,默认情况是按字面意思处理不匹配的模式。如果设置了nullglob
选项,则不匹配的模式“蒸发”;它将从命令中删除,甚至不会扩展到空字符串
在zsh
中,默认情况下,不匹配的模式会产生错误。设置nomatch
选项会导致不匹配的模式被逐字处理,并且zsh
还支持nullglob
选项,该选项会导致不匹配的模式消失。还有一个cshnullglob
选项,其作用类似于nullglob
,但要求命令中至少有一个模式匹配,否则会产生错误
请注意,POSIX指定如果模式包含无效的括号表达式或与任何现有文件名或路径名不匹配,则模式字符串应在sh中保持不变
ash、dash、ksh、bash和zsh在作为sh调用时都是这样的。在
bash
中,默认情况是按字面意思处理不匹配的模式。如果设置了nullglob
选项,则不匹配的模式“蒸发”;它将从命令中删除,甚至不会扩展到空字符串
在zsh
中,默认情况下,不匹配的模式会产生错误。设置nomatch
选项会导致不匹配的模式被逐字处理,并且zsh
还支持nullglob
选项,该选项会导致不匹配的模式消失。还有一个cshnullglob
选项,其作用类似于nullglob
,但要求命令中至少有一个模式匹配,否则会产生错误
请注意,POSIX指定如果模式包含无效的括号表达式或与任何现有文件名或路径名不匹配,则模式字符串应在sh中保持不变
ash、dash、ksh、bash和zsh在作为sh调用时都以这种方式运行。POSIX在sh
中指定
ash
、dash
、ksh
、bash
和zsh
在被调用为sh
时都是这样 POSIX指定在sh
中
ash
、dash
、ksh
、bash
和zsh
在被调用为sh
时都是这样 nullglob
是Bash中的默认值吗?其他shell中的默认值是什么?nullglob
是Bash中的默认值吗?其他shell的默认设置是什么?您的评论非常相关,我希望我能将两个答案标记为正确。如果您同意的话,我至少会在当前标记的正确答案中包含您的信息。您的评论非常相关,我希望我能将两个答案标记为正确。如果您同意的话,我至少会在当前标记的正确答案中包含您的信息。