在 BASH 中堆叠三元运算符

Stacking ternary operators in BASH

是的,这是一个问题,但让我先讲一些背景故事。我经常在一个论坛上有人说 BASH 脚本是让白痴看起来不错的愚蠢小把戏。现在我不是BASH程序员,但我想拥有"I told you so"这个头衔,证明只要坚持、坚持、坚持,任何事情都可以实现。

所以这对于一个活跃的项目来说真的没什么,或者我真的不需要任何东西,只是为了证明它可以完成。我也明白我可以用python、java、ruby、等等等等等等……我只想继续学习。

显然,虽然 BASH 没有真正的三元支持,但可以通过这样的方式实现:

varA=$([ "varB" == "true" ] && echo "$OKSYMB" || echo "$BADSYMB")

基本上就像它看起来 varA 将是 $OKSYMB,如果 true 其他任何东西将是 $BADSYMB - 互联网上有 1000 个示例。但这就是我的问题所在,如果有 3 个标志怎么办,我知道我可以(我已经这样做了)这样做:

case "$webservermenustatus" in
     "disabled") webservermenuicon="$DISABLEDSYMB";;
     "true") webservermenuicon="$OKSYMB";;
     "false") webservermenuicon="$BADSYMB";;
esac

我很乐意这样做:

webservermenuicon=$([ "$webservermenustatus" == "true" ] && echo -e "$OKSYMB" || [ "$webservermenustatus" == "false" ] && echo -e "$BADSYMB" || echo -e "$DISABLEDSYMB")

奇怪的是,它有点管用,尽管 $OKSYMB 会切断变量后的所有内容。其他 2 个效果很好。

我附上了 5 张图片通知图片编号 3 与 4 和 5。

  1. 切换码https://image.ibb.co/mhm4oR/theswitchcode.png
  2. 显示代码https://image.ibb.co/chQx8R/thedisplaycode.png
  3. 真正的偶像https://image.ibb.co/dqK2a6/truemenu.png
  4. 虚假图标https://image.ibb.co/i1GR2m/falsemenu.png
  5. 禁用图标。 https://image.ibb.co/f5aav6/disabledmenu.png

绿色的 OK 只是切断了菜单项标题的其余部分?

我知道这个案例有效,我可以使用 IF THEN ELIF FI,我可以将所有内容设置为 TRUE,然后区分 FALSE 和 DISABLED 之间的区别,这更多是想看看是否有人想通了 BASH 堆叠的三元运算符。

实际上,我只是用这个小脚本弄明白了:

#!/bin/bash

status=

switchstatus=$([ "$status" == "true" ] && echo "TRUE" || ([ "$status" == "false" ] && echo "FALSE" || echo "DISABLED"))

echo "You have made a $switchstatus choice in your life"

我需要将三元组的第二部分放在 () 中——现在解释为什么会这样,当你将结果回显给变量时,没有括号它会响应

你答对了 你生活中的错误选择

同时发送 TRUE 和下一个 && 一旦用()分隔,它只会将第一组&&发送给变量。

-- 有时简单是你的敌人:)