Ошибка использования -eq в тернарном операторе ($ var -eq 0? 1: 0) в bash - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть следующий фрагмент 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 является целым числом.

Есть ли лучший способ условно рассчитать код выхода?

Я нашел оператор c ? a : b на некоторых сайтах, говорящих об арифметике Bash, но я не смог приступить к работе:

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

Сообщение об ошибке:

. / Tools / GitLab-CI / Riviera-PRO.run.sh: строка 111: 1 -экв. 0? 1: 0: синтаксическая ошибка в выражении (маркер ошибки "0? 1: 0")


Обратите внимание, $COMMAND использует несколько целочисленных значений:

  • 0 - без команды
  • 1 - помощь
  • 2 - команда 1
  • 3 - ...

1 Ответ

0 голосов
/ 01 сентября 2018

Говоря только о том, как исправить использование вами троичного оператора - вам нужно использовать ==, а не -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
...