我是 Linux 的新手。我正在阅读 Linux: Rute Users 这本书。一切都很好,直到我来到 7.1 单元。
我的脚本如下:
#!/bin/sh
echo "enter X"
read X
echo "enter Y"
read Y
echo "X*Y = $X*$Y = $[X*Y] = $[$X*$Y]"
Run Code Online (Sandbox Code Playgroud)
我的终端没有给我 X*Y = 2*3 = 6,而是打印
X*Y = 2*3 = $[X*Y] = $[2*3]
Run Code Online (Sandbox Code Playgroud)
我也直接在终端里试过命令:
echo "$[2*3]"
Run Code Online (Sandbox Code Playgroud)
它正确地给了我 6。
我的脚本有什么问题?我正在使用 Ubuntu 桌面 12.04 LTS 32 位。谢谢!
((...)) 条件表达式评估算术表达式,就像它是用“普通”算法语言编写的一样(您甚至可以从变量中省略美元符号),如果表达式的计算结果为 0,则将退出状态设置为 1,如果表达式的计算结果为非零值,则为 0。
在 bash 3.2 及更高版本中,您可以(并且应该)使用 $(())
从这里引用
什么是bash?
Bash 继承自 Bourne Shell,是 GNU 产品,即“Bourne Again SHell”。它是大多数 Linux 机器上的标准命令行界面。它擅长交互性,支持命令行编辑、完成和调用。它还支持可配置的提示——大多数人意识到这一点,但不知道可以做多少。
您应该使用(( ))数学表达式:
echo "$(( 2*3 ))"
Run Code Online (Sandbox Code Playgroud)
或者
echo "$(( $X*$Y ))"
Run Code Online (Sandbox Code Playgroud)
甚至
echo "$(( X*Y ))"
Run Code Online (Sandbox Code Playgroud)
为什么echo $[..]在某些环境中也有效?
算术展开
算术扩展允许对算术表达式求值并替换结果。算术展开的格式为:
$((表达式))
旧格式 $[expression] 已弃用,并将在即将发布的 bash 版本中删除。