对于某些人来说,这听起来可能相当奇怪。假设我有一个字符串,它表示一些$((expression))
数学算术表达式,例如'$((1+1))'
。我希望执行它并将其结果传递给变量。
例子:
$ expression='$((5+5))'
$ echo $expression
'$((5+5))'
$ # Expected result: 10
我如何评估该字符串并存储其结果?
答案1
如果您正在评估字符串,请尝试eval
。
str="$[ 5 + 5 ]"
eval "numb=$str" # Turns into `numb=$[ 5 + 5 ]`
echo $numb # Outputs 10
eval
可以像执行 shell 代码一样执行字符串。小心!如果$str
包含特殊字符,则可能会破坏您的脚本,甚至造成安全漏洞。
答案2
答案3
如果它实际上是数学的,特别是如果它涉及简单的整数算术,那么您可以使用您拥有的确切格式:
$ var=$((1+1))
$ echo "$var"
2
如果是命令,情况也一样。例如,可以通过管道执行稍微复杂的数学运算bc
:
## simple integer math works
$ echo $((3 * 2))
6
## fractions fail
$ echo $((1.3 * 2))
bash: 1.3 * 2: syntax error: invalid arithmetic operator (error token is ".3 * 2")
## bc works
$ echo "1.3 * 2" | bc
2.6
因此,要将其存储在变量中,只需使用标准命令替换:
$ var=$(echo "1.3 * 2" | bc)
$ echo "$var"
2.6
最后,你还有eval
内置函数(参见help eval
)bash
:
$ help eval
eval: eval [arg ...]
Execute arguments as a shell command.
Combine ARGs into a single string, use the result as input to the shell,
and execute the resulting commands.
Exit Status:
Returns exit status of command or success if command is null.