有这样的方法吗
int a = (b == 5) ? c : d;
使用Bash ?
有这样的方法吗
int a = (b == 5) ? c : d;
使用Bash ?
当前回答
这和弗拉基米尔的回答很像。如果你的“三元”是一个“如果真,字符串,如果假,空”的情况下,那么你可以简单地做:
$ c="it was five"
$ b=3
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
$ b=5
$ a="$([[ $b -eq 5 ]] && echo "$c")"
$ echo $a
it was five
其他回答
在bash中还有一个非常相似但更简单的三元条件语句语法:
a=$(( b == 5 ? 123 : 321 ))
如果条件仅仅是检查是否设置了变量,甚至还有更短的形式:
a=${VAR:-20}
如果VAR已设置,则会将VAR值赋给a,否则将为其赋值默认值20——这也可以是表达式的结果。
这种方法在技术上称为“参数展开”。
[ $b == 5 ] && { a=$c; true; } || a=$d
这将避免在&&和||之间的代码失败时意外执行||之后的部分。
这里有另一个选项,你只需要指定你分配一次的变量,不管你分配的是字符串还是数字:
VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`
只是一个想法。:)
简单的三元
brew list | grep -q bat && echo 'yes' || echo 'no'
此示例将确定您是否使用自制程序安装bat
如果是,你会看到"是"
如果是false,你会看到"no"
我在这里添加了-q来抑制grepped字符串输出,所以你只能看到“yes”或“no”
真正的模式是这样的
doSomethingAndCheckTruth && echo 'yes' || echo 'no'
用bash和zsh测试