如何在外壳中获取测试命令返回码?

Rob*_*Pen 5 shell exit-code

是否有更好的方法从一行中获取命令的返回代码。例如:

$ test $(ls -l) ||echo 'ok'
-bash: test: too many arguments
ok
Run Code Online (Sandbox Code Playgroud)

上面的脚本在test命令中有错误,因为它似乎解析输出“ ls-l”而不返回代码。

我知道使用“如果”语法可以正常工作,但是需要多一行。

ls -l
if [ $? -eq 0 ];then
   echo 'ok'
fi
Run Code Online (Sandbox Code Playgroud)

Jah*_*hid 6

您可以使用&&||使这些东西变得简单。例如,在以下内容中:

ls -l && echo ok
Run Code Online (Sandbox Code Playgroud)

echo ok&&仅当( ls -l)之前的命令返回时才会运行0

另一方面,在以下方面:

ls -l || echo 'not ok'
Run Code Online (Sandbox Code Playgroud)

echo 'not ok'仅当之前的命令||返回非零时才会运行。

另外,您可以if..else使用以下命令使您的块成为单行;

if ls -l;then echo ok;else echo 'not ok';fi
Run Code Online (Sandbox Code Playgroud)

但这可能会使您的代码难以阅读,因此不推荐。


oli*_*liv 2

if语句正在捕获命令的返回值,例如ls

if ls -l; then
    echo 'ok'
fi
Run Code Online (Sandbox Code Playgroud)