在 bash shell 中使用算术扩展时出现“未找到命令”

在 bash shell 中使用算术扩展时出现“未找到命令”

使用 Ubuntu Desktop,我打开了终端并使用 bash shell。bash 的 shell 扩展之一是算术扩展,语法如下:

$(( EXPRESSION ))
or 
$[ EXPRESSION ]

当我进行算术运算时,它确实返回了正确的值,但后面总是跟着“未找到命令”:

$ $((1+2))
3: command not found
$ $[1+2]
3: command not found
$ $[2+2]
4: command not found
$ $((2*6))
12: command not found

我的问题是为什么它显示“未找到命令”以及我该如何解决这个问题?

答案1

你必须echo在所有命令前添加命令,

$ echo $[1+2]
3

您不必直接放在$[1+2]终端上,因为 bash 会计算$[1+2]并再次解析相同的内容,因此会出现命令未找到错误。

例如

$ var="sudo apt-get update"
$ $var

Ign http://archive.canonical.com saucy InRelease                               
Ign http://ppa.launchpad.net saucy InRelease                                   
Ign http://ubuntu.inode.at saucy InRelease                          
Ign http://extras.ubuntu.com saucy InRelease                        
29% [Waiting for headers] [Waiting for headers] [Waiting for headers]

在上面的例子中,sudo apt-get update命令被分配给一个变量var。在运行时$var,bash 首先扩展它,然后再次解析扩展的命令。

答案2

$ $((1+2))
3: command not found

这里发生的事情是bash计算$((1+2))结果为3bash然后查找名为3执行的命令。它没有找到它。因此出现错误。正如@Avinash建议的那样,使用echo来避免这种情况。

$ echo  $((1+2))
3

答案3

因为bash正在尝试执行扩展的输出,但它在 中找不到任何command带有名称的。如果只是尝试,请使用或将其分配给变量并稍后使用它。3PATHecho

echo $((1+2))
3
test=$((1+2))
echo $test
3

相关内容