我试过了:
aaa=10
echo "sdf sdfsd sd ${aaa+=1} sdf sdf "
回来了:
aaa=10
sdf sdfsd sd =1 sdf sdf
bash是否支持以某种方式执行此操作?
答案 0 :(得分:2)
是。您可以使用$(( expression ))
进行算术扩展:
echo "sdf sdfsd sd $((myvar+=1)) sdf sdf "
^^ ^^
输出(带有前面的变量赋值myvar=0
):
sdf sdfsd sd 1 sdf sdf
整个标记$(( expression ))
在评估后扩展为表达式的结果。因此echo $((1+2))
会3
。
表达式评估的另一个非扩展版本(( expr ))
,根据表达式的评估(非零/零)返回true
/ false
。
来自man bash
:
算术扩展
算术扩展允许评估算术表达式和结果的替换。算术扩展的格式为:
$((expression))
您必须使用双括号,因为单个括号用于捕获命令的输出:
a=$(echo "hahaha") # a is hahaha
a=$((1+2)) # a is 3
感谢@JohnKugelman指出了语法和联机帮助页的名称
答案 1 :(得分:0)
${parameter+word}
是Bash中的一个特殊parameter expansion(也是POSIX所要求的):它代表"如果 parameter
是取消设置,不使用任何内容,否则使用 word
的扩展来代替"。
如果 :+
<,使用{em> +
扩展的word
代替parameter
的扩展版本有所不同/ em>未设置或null 。
以下是所有可能的情况:
$ unset myvar
$ echo "${myvar+instead}" # Unset: print nothing
$ myvar=
$ echo "${myvar+instead}" # Null: print "instead"
instead
$ myvar=this
$ echo "${myvar+instead}" # Set and not null: print "instead"
instead
$ unset myvar
$ echo "${myvar:+instead}" # Unset: print nothing
$ myvar=
$ echo "${myvar:+instead}" # Null: PRINT NOTHING (effect of :+)
$ myvar=this
$ echo "${myvar:+instead}" # Set and not null: print "instead"
instead
在您的情况下,由于myvar
不为空,您会看到=1
。
你想要的是arithmetic expansion(见iBug's answer)。
在Bash中,您可以使用前缀增量:
$ var=10
$ for i in {1..3}; do echo "$((++var))"; done
11
12
13
POSIX doesn't require ++
和--
。