为什么./script.sh ?
会抛出No match
。 ./script.sh
运行正常。
#!/bin/sh
echo "Hello World"
答案 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
但请注意,此并未真正解决您的问题,但只在当前目录没有单字符文件名时才屏蔽它。唯一正确的解决方法是纠正您的使用情况,以便正确引用和转义值。