Ubuntu 无法计算 [ ..] 中的表达式?

Ubuntu 无法计算 [ ..] 中的表达式?

我是 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 版本中删除。

相关内容