![在 bash shell 中使用算术扩展时出现“未找到命令”](https://linux22.com/image/850708/%E5%9C%A8%20bash%20shell%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%AE%97%E6%9C%AF%E6%89%A9%E5%B1%95%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9C%E6%9C%AA%E6%89%BE%E5%88%B0%E5%91%BD%E4%BB%A4%E2%80%9D.png)
使用 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))
结果为3
。 bash
然后查找名为3
执行的命令。它没有找到它。因此出现错误。正如@Avinash建议的那样,使用echo
来避免这种情况。
$ echo $((1+2))
3
答案3
因为bash
正在尝试执行扩展的输出,但它在 中找不到任何command
带有名称的。如果只是尝试,请使用或将其分配给变量并稍后使用它。3
PATH
echo
echo $((1+2))
3
test=$((1+2))
echo $test
3