有人可以解释这段代码意味着什么吗?
我相信第二行是“如果退出状态为零”,那么回显“有效命令”但我不明白第一行
$@ &>/dev/null
if [[ $? = 0 ]]
then
echo "Valid command"
fi
答案 0 :(得分:7)
第一行运行通过简单地使用脚本的所有参数形成的命令,并将输出重定向到/ dev / null,这实际上将它抛弃。
内置变量$@扩展为所有位置参数,每个参数都是带引号的字符串,即参数完整传递,无需解释或扩展。为了达到这个效果,我相信你需要引用变量的使用,即说"$@"
。
运算符&>
重定向stdout和stderr。
答案 1 :(得分:4)
根据manual,$@
扩展到位置参数,从1开始。如果将此脚本称为scripty.sh ls /
,则会在将所有输出重定向到位桶时执行ls /
。这应该会成功(我希望!)因此脚本将打印Valid command
。如果您将其称为scripty.sh ls /some/nonexistent/directory
,则ls
命令将失败,并且脚本将不会输出任何内容。
实际上,我认为脚本可以改进为在$@
附近放置双引号,以便带有空格的参数不会使解释器绊倒。
使用$@
命令ls "/Library/Application Support"
扩展为三个单词。使用"$@"
它会扩展为两个,并且命令的运行就像没有脚本包装它一样。
答案 2 :(得分:2)
我想补充一点,这是不必要的冗长,可以缩短为
if "$@" &>/dev/null
then
echo "Valid command"
fi
甚至更短
"$@" &>/dev/null && echo "Valid command"