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