在BASH中堆叠三元运算符

时间:2017-11-17 15:08:58

标签: bash ternary-operator

是的,这是一个问题,但让我先回答一下。在我经常说BASH脚本的论坛中的某些人是使白痴看起来很好的愚蠢的小技巧。现在我不是BASH程序员,但我想获得标题"我告诉过你"并且通过一致性,坚持性和坚持性证明,任何事都可以实现。

所以这对于一个活跃的项目来说真的没什么,或者我真正没有必要的任何东西,但要证明它可以完成。我也明白我可以使用python,java,ruby等等......我只想继续学习。

显然虽然BASH并不真正有三元支持,但可以通过以下方式实现:

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

基本上就像看起来varA将是$ OKSYMB如果其他任何东西都是$ 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
  6. 绿色OK只是切断菜单项标题的其余部分?

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

1 个答案:

答案 0 :(得分:0)

实际上,我只是想通过这个小脚本来解决它:

#!/bin/bash

status=$1

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

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

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

你做的是真的 生活中错误的选择

发送TRUE和下一个&&一起 一旦它与()分开,它将只发送第一组&&到变量。

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