gpt4 book ai didi

shell - ksh中两种风格的check返回值

转载 作者:行者123 更新时间:2023-12-04 23:06:26 27 4
gpt4 key购买 nike

在 ksh shell 中,我想在运行命令后检查返回值,我写了两种样式:

if [ $? -ne 0 ] ; then
echo "failed!"
exit 1
else
exit 0
fi


[ $? -ne 0 ] && echo "failed!" && exit 1

它们是等价的吗?如果不是,如果我想在一行中写它,我该怎么办?

最佳答案

它们很接近,但又不一样。一、if将执行 exit 1即使echo由于某种原因失败;链式表达式不会。此外,链式版本缺少 else exit 0 的等效项。 .

一个更好的等价物是这样的:

[ $? -ne 0 ] && { echo "failed!"; exit 1; } || exit 0

这被标记为 ksh ,因此您可能会发现数字表达式语法更清晰:
(( $? )) && { echo "failed!"; exit 1; } || exit 0

但是你也可以写一个 if一方面,如果您喜欢:
if (( $? )); then echo "failed!"; exit 1; else exit 0; fi

如果你刚刚在这个表达式上面运行的命令是为了设置 $?很短,您可能只想直接使用它作为 if表达式 - 使用反向子句,因为退出代码 0 为真:
if grep -q "pattern" /some/filename; then exit 0; else echo "failed!"; exit 1; fi

对于这种简单的情况,这无关紧要,但通常您可能希望避免 echo .相反,使用 printf - 或者如果你不介意只使用 ksh,你可以使用 print . echo 的问题是它没有提供一种可移植的方式来处理变量中的奇怪字符串:
$ x=-n
$ echo "$x"
$

虽然两者 printfprint做:
$ printf '%s\n' "$x"
-n
$ print - "$x"
-n

同样,这里不是问题,或者任何时候你只是打印出一个文字字符串,但我发现更容易训练自己摆脱 echo完全习惯。

关于shell - ksh中两种风格的check返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com