找不到expr命令?为什么找不到expr但其他一切都是?

时间:2016-05-17 07:32:30

标签: bash

我花了几个小时试图让下面的代码工作

    PATH="C:\Ben\MyPictures"
    echo $PATH
    MY=`expr 2 + 2`

但这不起作用,因为“expr:command not found”。我在StackOverflow上挖的唯一东西是路径问题(I.E.设置我的环境变量),但如果这就是问题,为什么echo,let和declare等其他函数已经正常工作了?

有关更多上下文,这是关于窗口的cygwin的近乎新鲜的安装。我的问题是为什么我找不到expr?

2 个答案:

答案 0 :(得分:6)

您已将PATH修改为只有一个目录(因此无法找到expr)。您必须将新路径附加到PATH,而不是替换现有的PATH值,如下所示:

export PATH="$PATH:C:\Ben\MyPictures"

也可以使用bash的内置算术评估来代替调用外部进程expr进行计算:

$ echo $((2+2))
4

编辑:

是的,这些可行,因为它们是{strong> 可从$PATH中列出的目录中找到的。

相反,他们(echotype等)是由bash shell本身提供的功能,称为shell内置函数。

输入type echotype expr以了解它的命令类型(别名/ shell内置/可执行文件等)。

通常可以在help shellBuiltin找到Shell内置帮助,因为我们使用man个页面来获取可执行文件。

PS:type本身是一个内置的shell(参见type type

答案 1 :(得分:2)

路径变量PATH用于查找随环境提供的标准二进制文件的位置。事实上,系统环境变量通常是大写的(例如HOME)。

在你的命令中:

PATH="C:\Ben\MyPictures"

您不小心(或故意?)用C:\Ben\MyPictures替换了标准二进制文件的标准路径,以便命令解释器bash在这里找不到expr。使用大写变量时,比如说PATH,你可以这样做:

if [ -z "$PATH" ] #check if a variable is empty
then
PATH="C:\Ben\MyPictures"
else
PATH="$PATH:C:\Ben\MyPictures"
fi

更好的选择确实是为用户定义的变量使用小写字母:

path="C:\Ben\MyPictures"
#in this case you should not get an error for expr but
# I am not sure how a Linux-Like environment handle character case.
# check that out.