bash - 未找到 expr 命令?为什么没有找到 expr 而其他的都找到了?

标签 bash

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

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

但这不会起作用,因为“expr: command not found”。我在 StackOverflow 上唯一发现的是路径问题(即设置我的环境变量),但如果这是问题所在,为什么其他函数(如 echo、let 和 declare)已经可以正常工作了?

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

最佳答案

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

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

除了调用外部进程 expr 进行计算之外,您还可以使用 bash 的内置算术计算:

$ echo $((2+2))
4

编辑:

是的,它们可以工作,因为它们不是可执行文件,是从 $PATH 中列出的目录中找到的。

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

输入 type echotype expr 来知道它是什么类型的命令(别名/shell 内置/可执行文件等)

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

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

关于bash - 未找到 expr 命令?为什么没有找到 expr 而其他的都找到了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269832/

相关文章:

ruby - 为什么我不能在 Ruby 脚本中访问我的 bash 提示符?

bash - bash 中嵌套循环的奇怪行为

linux - 我如何重命名具有不同扩展名的文件夹中的前 5 个文件,同时保持旧文件相同?

linux - 为什么 "source ~/.profile"不断添加到我的 $PATH 中?

linux - Bash 脚本 : How to display output for checking root logins via SSH not allowed?

linux - 如何从当前目录中的所有文件夹中删除 Linux 中具有特定文件名的文件?

java - 无法从 java 运行 shell 脚本

具有基本 if/else 和基于模式运行的进程计数的 Bash 脚本

macos - .bash_profile 语法错误 : unexpected end of file

c - 如何从 bash 向 C 程序提供输入?