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'