Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我可以在bash字符串插值中计算表达式吗?_Linux_Bash - Fatal编程技术网

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
。实际上,他们只想增加每次迭代(无论新值是立即返回还是在后续循环中返回)。+=我想看的是: