评估字符串 ```$((expression))``` 类似并保存在变量中

评估字符串 ```$((expression))``` 类似并保存在变量中

对于某些人来说,这听起来可能相当奇怪。假设我有一个字符串,它表示一些$((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

就像平常一样,将其存储在变量中。

$ result=$((5+5))
$ echo $result 
10

如果这不是你的意思,编辑您的帖子并发布附加信息。

答案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 evalbash

$ 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.

相关内容