Linux 我可以在bash字符串插值中计算表达式吗?
我试过这个:Linux 我可以在bash字符串插值中计算表达式吗?,linux,bash,Linux,Bash,我试过这个: aaa=10 echo "sdf sdfsd sd ${aaa+=1} sdf sdf " 然后回来了: aaa=10 sdf sdfsd sd =1 sdf sdf bash支持这样做吗?是的。您可以使用$((表达式))进行算术展开: echo "sdf sdfsd sd $((myvar+=1)) sdf sdf " ^^ ^^ 输出(使用前面的变量赋值myvar=0): 整个标记$((表达式))在求值后展开为表达式的
aaa=10
echo "sdf sdfsd sd ${aaa+=1} sdf sdf "
然后回来了:
aaa=10
sdf sdfsd sd =1 sdf sdf
bash支持这样做吗?是的。您可以使用$((表达式))
进行算术展开:
echo "sdf sdfsd sd $((myvar+=1)) sdf sdf "
^^ ^^
输出(使用前面的变量赋值myvar=0
):
整个标记$((表达式))
在求值后展开为表达式的结果。因此,echo$((1+2))
给出了3
表达式求值还有另一个非扩展版本,((expr))
,它根据表达式的求值返回true
/false
(非零/零)
从manbash
:
算术展开
算术展开允许计算算术表达式并替换结果。算术展开的格式为:
$((expression))
必须使用双括号,因为单括号用于捕获命令的输出:
a=$(echo "hahaha") # a is hahaha
a=$((1+2)) # a is 3
感谢@JohnKugelman指出语法名称和手册页是的。您可以使用
$((表达式))
进行算术展开:
echo "sdf sdfsd sd $((myvar+=1)) sdf sdf "
^^ ^^
输出(使用前面的变量赋值myvar=0
):
整个标记$((表达式))
在求值后展开为表达式的结果。因此,echo$((1+2))
给出了3
表达式求值还有另一个非扩展版本,((expr))
,它根据表达式的求值返回true
/false
(非零/零)
从manbash
:
算术展开
算术展开允许计算算术表达式并替换结果。算术展开的格式为:
$((expression))
必须使用双括号,因为单括号用于捕获命令的输出:
a=$(echo "hahaha") # a is hahaha
a=$((1+2)) # a is 3
感谢@JohnKugelman指出了语法的名称,manpage
${parameter+word}
在Bash中是一个特殊的(也是必需的):它代表“如果parameter
未设置,则不使用任何内容,否则使用word
的扩展”
如果参数
未设置或为空,则使用字
展开的扩展名为:+
而不是+
以下是所有可能的情况:
$ 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
不是null,所以您看到的是=1
你想要的是(见)
在Bash中,您可以使用前缀增量:
$ var=10
$ for i in {1..3}; do echo "$((++var))"; done
11
12
13
POSIX++
和--
。${parameter+word}在Bash中是一个特殊的(也是必需的):它代表“如果参数
未设置,则不使用任何内容,否则使用word
的扩展”
如果参数
未设置或为空,则使用字
展开的扩展名为:+
而不是+
以下是所有可能的情况:
$ 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
不是null,所以您看到的是=1
你想要的是(见)
在Bash中,您可以使用前缀增量:
$ var=10
$ for i in {1..3}; do echo "$((++var))"; done
11
12
13
POSIX
++
和--
。回声“sdf sdfsd sd=$((myvar+=1))sdf sdf”
必须手动添加算术展开前的等号@JohnKugelmanThe OP不希望=1
。他们想要11
。实际上,他们只想增加每次迭代(无论新值是立即返回还是在后续循环中返回)。+=我想看的是:echo“sdf sdfsd sd=$((myvar+=1))sdf sdf”
算术展开前的等号必须手动添加@JohnKugelmanThe OP不希望=1
。他们想要11
。实际上,他们只想增加每次迭代(无论新值是立即返回还是在后续循环中返回)。+=我想看的是: