有这样的方法吗
int a = (b == 5) ? c : d;
使用Bash ?
有这样的方法吗
int a = (b == 5) ? c : d;
使用Bash ?
当前回答
if [[ $b -eq 5 ]]; then a="$c"; else a="$d"; fi
其他答案中建议的cond && op1 || op2表达式有一个固有的错误:如果op1有一个非零的退出状态,op2将静默地成为结果;在-e模式下也不会捕获错误。因此,该表达式只有在op1永远不会失败的情况下才安全使用(例如,:,如果是内置的,true,或者没有任何可能失败的操作(如除法和OS调用)的变量赋值)。
注意“”引号。它们将防止将所有空白转换为单个空格。
如果$b等于一个测试操作符(例如,如果$b等于一个测试操作符,则双方括号与单方括号相反,可以防止错误的操作。“- z”;一个变通方法是[是["x$b" == "xyes"],它只适用于字符串比较);他们还取消了报价的要求。
其他回答
面向字符串的替代方法,使用数组:
spec=(IGNORE REPLACE)
for p in {13..15}; do
echo "$p: ${spec[p==14]}";
done
输出:
13: IGNORE
14: REPLACE
15: IGNORE
三元运算符?:是if/else的缩写形式
case "$b" in
5) a=$c ;;
*) a=$d ;;
esac
Or
[[ $b = 5 ]] && a="$c" || a="$d"
这样的方法怎么样:
# any your function
function check () {
echo 'checking...';
# Change the following to 'true' to emulate a successful execution.
# Note: You can replace check function with any function you wish.
# Be aware in linux false and true are funcitons themselves. see 'help false' for instance.
false;
}
# double check pattern
check && echo 'update' \
|| check || echo 'create';
看看条件语句是如何在RxJs中工作的(即过滤器管道)。 是的,从我的角度来看,这是代码复制,但更实用的方法。
简单的三元
brew list | grep -q bat && echo 'yes' || echo 'no'
此示例将确定您是否使用自制程序安装bat
如果是,你会看到"是"
如果是false,你会看到"no"
我在这里添加了-q来抑制grepped字符串输出,所以你只能看到“yes”或“no”
真正的模式是这样的
doSomethingAndCheckTruth && echo 'yes' || echo 'no'
用bash和zsh测试
如果您想要类似的语法,您可以使用它
a=$(( $((b==5)) ? c : d ))