我花了几个小时试图让下面的代码工作
PATH="C:\Ben\MyPictures"
echo $PATH
MY=`expr 2 + 2`
但这不起作用,因为“expr:command not found”。我在StackOverflow上挖的唯一东西是路径问题(I.E.设置我的环境变量),但如果这就是问题,为什么echo,let和declare等其他函数已经正常工作了?
有关更多上下文,这是关于窗口的cygwin的近乎新鲜的安装。我的问题是为什么我找不到expr?
答案 0 :(得分:6)
您已将PATH
修改为只有一个目录(因此无法找到expr
)。您必须将新路径附加到PATH
,而不是替换现有的PATH
值,如下所示:
export PATH="$PATH:C:\Ben\MyPictures"
也可以使用bash的内置算术评估来代替调用外部进程expr
进行计算:
$ echo $((2+2))
4
编辑:
是的,这些可行,因为它们是{strong> 可从$PATH
中列出的目录中找到的。
相反,他们(echo
,type
等)是由bash
shell本身提供的功能,称为shell内置函数。
输入type echo
和type 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.