在bash中三元运算符($ var -eq 0?1:0)中使用-eq时出错

时间:2018-09-01 18:11:21

标签: bash conditional-operator

在较大的Bash脚本中,我具有以下Bash代码段:

if [ $COMMAND -le 1 ]; then
  test $COMMAND -eq 0 && echo 1>&2 -e "\n${COLORED_ERROR} No command selected.${ANSI_NOCOLOR}"
  echo ""
  echo "Synopsis:"
  echo "  Script to simulate '$ModuleName' module testbenches with Riviera-PRO."
  echo ""
  echo "..."

  test $COMMAND -eq 0 && exit 1 || exit 0
fi

```

重点是test $COMMAND -eq 0 && exit 1 || exit 0
编辑$COMMAND的类型是整数。

是否有更好的方法来有条件地计算退出代码?

我在一些谈论Bash算术的网站上发现了一个c ? a : b运算符,但我无法工作:

exit $(($COMMAND -eq 0 ? 1 : 0

错误消息:

  

./ tools / GitLab-CI / Riviera-PRO.run.sh:第111行:1 -eq 0? 1:0:表达式中的语法错误(错误令牌为“ 0?1:0”)


请注意,$COMMAND使用多个整数值:

  • 0-无命令
  • 1-帮助
  • 2-命令1
  • 3-...

1 个答案:

答案 0 :(得分:3)

仅说出有关如何更正三元运算符的用法-您需要在算术上下文中使用==而不是-eq

retval=1
exit $(( (retval == 0) ? 1 : 0 ))

也就是说,如果只想在另一个命令失败的情况下以成功的状态退出,那就很简单:

! somecommand # run somecommand, and set $? to 0 only if it exited with an error
exit          # use $? as our own exit status