shell脚本退出,与问号符号不匹配

时间:2015-11-30 23:07:35

标签: shell

为什么./script.sh ?会抛出No match./script.sh运行正常。

script.sh

#!/bin/sh
echo "Hello World"

1 个答案:

答案 0 :(得分:0)

?是UNIX上的glob字符。默认情况下,在POSIX shell中,根本不匹配任何文件的glob将评估为自身;但是,许多shell都可以选择修改此行为,并且在这种情况下不传递任何参数或使其成为错误。

如果你想传递这个(或任何其他可以解释为glob的字符串),请引用它:

./script.sh '?'

如果您没有使用引号,请考虑以下操作:

touch a b c
./script.sh ?   ## this is the same as running: ./script.sh a b c

那就是说 - 你的外壳的行为(当没有匹配存在时退出,而不是默认将非匹配的glob表达式作为文字传递)是非默认的。如果这个shell是bash,你可以用:

修改它
shopt -u failglob

但请注意,此并未真正解决您的问题,但只在当前目录没有单字符文件名时才屏蔽它。唯一正确的解决方法是纠正您的使用情况,以便正确引用和转义值。