shell – ksh中两种检查返回值的样式
发布时间:2020-12-15 22:07:21 所属栏目:安全 来源:网络整理
导读:在ksh shell中,我想在运行命令后检查返回值,我写了两个样式: if [ $? -ne 0 ] ; then echo "failed!" exit 1else exit 0fi[ $? -ne 0 ] echo "failed!" exit 1 它们是等价的吗?如果没有,如果我想把它写成一行,我该怎么办? 解决方法 它们很接近,但不一样.
在ksh
shell中,我想在运行命令后检查返回值,我写了两个样式:
if [ $? -ne 0 ] ; then echo "failed!" exit 1 else exit 0 fi [ $? -ne 0 ] && echo "failed!" && exit 1 它们是等价的吗?如果没有,如果我想把它写成一行,我该怎么办? 解决方法
它们很接近,但不一样.首先,即使由于某种原因回声失败,if也将执行退出1;链式表达不会.此外,链接版本缺少等于else退出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表达式 – 使用reverse子句,因为退出代码0为真: if grep -q "pattern" /some/filename; then exit 0; else echo "failed!"; exit 1; fi 这个简单的情况并不重要,但总的来说你可能想避免回声.相反,使用printf – 或者如果你不介意只使用ksh,你可以使用print. echo的问题在于它没有提供一种处理变量中奇怪字符串的方法: $x=-n $echo "$x" $ 虽然printf和print都有: $printf '%sn' "$x" -n $print - "$x" -n 再说一遍,这里不是问题,或者你只是打印出一个文字字符串,但我发现完全训练自己摆脱回声习惯更容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |