gpt4 book ai didi

"x = (x - 1) unless (x - 1 == 0) in which case y"的 Bash 表达式

转载 作者:行者123 更新时间:2023-11-29 09:50:25 24 4
gpt4 key购买 nike

我想递减一个变量“x”,但如果递减 x 产生 0,我想改为将标记值(比如“你好”)存储到 x 中。

我可以用两个表达式来做到这一点:

x=$((x - 1))
[[ "$x" -eq "0" ]] && x=hello

是否有一种优雅的单行代码可以做到这一点?我一直在试验数学评估和三元运算符,但是

x=1
echo $((x-1 == 0 ? "hello" : x-1))

永远不会打印hello,它只会打印0

最佳答案

您可以使用 (( )) 来评估其内容是否为非零,如果不是,您可以有条件地执行命令:

$ x=1
$ (( --x )) || x='hello'
$ echo "$x"
hello

(( )) 如果内部表达式的计算结果为非零,则计算结果为真(退出状态 0):

  • (( 1 )) 为真
  • (( 0 )) 为假
如果 x 在计算之前为 1,则

(( --x )) 为假。

如果三元运算符同时适用于字符串和数字,这也可以写成

(( x = x-1 ? x-1 : 'hello' ))

但字符串在 Bash 的算术上下文中计算为 0。

关于 "x = (x - 1) unless (x - 1 == 0) in which case y"的 Bash 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49133092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com