Bash 解释这段代码

Bash 解释这段代码,bash,Bash,有人能解释一下这段代码是什么意思吗 我相信第二行是“如果退出状态为零”,然后回显“有效命令”,但我不理解第一行 $@ &>/dev/null if [[ $? = 0 ]] then echo "Valid command" fi 第一行运行命令,该命令只需使用脚本的所有参数,并将输出重定向到/dev/null,这实际上会将其丢弃 内置变量扩展到所有位置参数,每个参数都是带引号的字符串,即参数完整传递,无需解释或扩展。为了达到这个效果,我相信您需要引用变量的用法,即说“$@

有人能解释一下这段代码是什么意思吗

我相信第二行是“如果退出状态为零”,然后回显“有效命令”,但我不理解第一行

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

第一行运行命令,该命令只需使用脚本的所有参数,并将输出重定向到/dev/null,这实际上会将其丢弃

内置变量扩展到所有位置参数,每个参数都是带引号的字符串,即参数完整传递,无需解释或扩展。为了达到这个效果,我相信您需要引用变量的用法,即说
“$@”

操作员
&
重定向stdout和stderr。

根据,
$@
展开到位置参数,从一个开始。如果将此脚本称为
scripty.sh ls/
,它将执行
ls/
,同时将所有输出重定向到位存储桶。这应该会返回成功(我希望如此!),因此脚本将打印
有效命令
。如果调用它
scripty.sh ls/some/nonexistent/directory
,那么
ls
命令应该失败,脚本将不输出任何内容

实际上,我认为脚本可以改进为在
$@
周围加双引号,这样带空格的参数就不会使解释器出错


使用
$@
将命令
ls”/Library/Application Support“
扩展为三个单词。使用
“$@”
将其扩展为两个,并且命令的运行方式与不使用脚本包装的情况相同。

我想补充一点,这是不必要的冗长,可以缩短为

if "$@" &>/dev/null
then
    echo "Valid command"
fi
甚至更短

"$@" &>/dev/null && echo "Valid command"

只是为了支持:这里有解释:我认为
$*
$@
只有在用双引号括起来时才不同。@mkb:你说得对。我担心@unwind不是:如果不指定
“$@”
,参数将得到空格分割,即
函数TT(){$@;};TT ls 12'3 4'