解释这段代码

时间:2011-12-06 15:24:30

标签: bash

有人可以解释这段代码意味着什么吗?

我相信第二行是“如果退出状态为零”,那么回显“有效命令”但我不明白第一行

$@ &>/dev/null
if [[ $? = 0 ]]
then
   echo "Valid command"
fi

3 个答案:

答案 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"