Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用命令和glob";回音-?“;?_Bash_Shell_Zsh_Glob - Fatal编程技术网

Bash 使用命令和glob";回音-?“;?

Bash 使用命令和glob";回音-?“;?,bash,shell,zsh,glob,Bash,Shell,Zsh,Glob,如果我想匹配一个名为“-f”或“-r”的文件,我可以这样做 test.sh -? 如果我想将文本'-?'作为参数发送到程序,我可能会执行以下操作: test.sh -\? 如果不存在这样的文件“-f”或“-r”或类似文件,那么我的shell应该如何处理 test.sh -? 它是否应该告诉我没有与此模式匹配的文件?如果不存在这样的模式,默认情况下,shell只返回您提供的模式,包括您使用的*或?字符。要确定文件是否实际存在,请测试它。因此,在脚本中,使用: [ -f "$1" ] ||

如果我想匹配一个名为“-f”或“-r”的文件,我可以这样做

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的默认设置是什么?您的评论非常相关,我希望我能将两个答案标记为正确。如果您同意的话,我至少会在当前标记的正确答案中包含您的信息。您的评论非常相关,我希望我能将两个答案标记为正确。如果您同意的话,我至少会在当前标记的正确答案中包含您的信息。