linux shell 三元运算符,Bash中的三元运算符(?:)

有没有办法做这样的事情

int a = (b == 5) ? c : d;

用Bash?

#1楼

如果条件只是检查是否设置了变量,那么甚至还有一个较短的形式:

a=${VAR:-20}

将要分配给a的值VAR如果VAR被设置,否则将分配给它的默认值20 -这也可以是一个表达的结果。

正如Alex在评论中指出的那样,这种方法在技术上被称为“参数扩展”。

#2楼

[ $b == 5 ] && { a=$c; true; } || a=$d

这将避免在||之后执行该部分 在&&和||之间的代码时偶然发生 失败。

#3楼

这是另一个选项,您只需要指定一次分配的变量,无论您的分配是字符串还是数字都无关紧要:

VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`

只是一个想法。 :)

#4楼

if [ "$b" -eq 5 ]; then a="$c"; else a="$d"; fi

cond && op1 || op2 在其他答案中建议的cond && op1 || op2表达式有一个固有的错误:如果op1具有非零退出状态,则op2默默地成为结果; 在-e模式下也不会捕获错误。 因此,如果op1永远不会失败,那么该表达式只能安全使用(例如:如果内置或变量赋值没有任何可能失败的操作(如除法和OS调用),则为true )。

注意""引号。 如果$b为空或具有空格,则第一对将防止语法错误。 其他人会阻止将所有空格转换为单个空格。

#5楼

以下似乎适用于我的用例:

例子

$ tern 1 YES NO

YES

$ tern 0 YES NO

NO

$ tern 52 YES NO

YES

$ tern 52 YES NO 52

NO

并可以在如下的脚本中使用:

RESULT=$(tern 1 YES NO)

echo "The result is $RESULT"

燕鸥

function show_help()

{

echo ""

echo "usage: BOOLEAN VALUE_IF_TRUE VALUE_IF_FALSE {FALSE_VALUE}"

echo ""

echo "e.g. "

echo ""

echo "tern 1 YES NO => YES"

echo "tern 0 YES NO => NO"

echo "tern "" YES NO => NO"

echo "tern "ANY STRING THAT ISNT 1" YES NO => NO"

echo "ME=$(tern 0 YES NO) => ME contains NO"

echo ""

exit

}

if [ "$1" == "help" ]

then

show_help

fi

if [ -z "$3" ]

then

show_help

fi

# Set a default value for what is "false" -> 0

FALSE_VALUE=${4:-0}

function main

{

if [ "$1" == "$FALSE_VALUE" ]; then

echo $3

exit;

fi;

echo $2

}

main "$1" "$2" "$3"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值