在Bash脚本中找不到mkdir命令

28

我不知道为什么在运行这个简单的脚本时出现错误:

#!/bin/bash

read -p "Please enter directory name: " DIR
read -p "Please enter the path: " PATH
mkdir -p "$PATH/$DIR"
line 7: mkdir: command not found

13
你正在修改 $PATH 环境变量!这正是为什么你应该避免使用大写变量名的原因。 - Biffen
5
不要使用 ALL_CAPS 变量名,原因是这些变量名被保留给 shell 使用。请注意避免此类命名方式。 - Etan Reisner
2个回答

61
不要使用变量PATH。该变量包含搜索可执行程序的目录列表。由于您替换了它,脚本无法找到mkdir程序。
通常应避免使用全部大写的变量,这些变量通常用作shell或其他程序的参数。

1
@lmsurprenant 这不仅仅是在 MacOS 上,而是在任何操作系统上使用 zsh。但是这个问题被标记为 bash - Barmar

6

PATH 变量是一个重要的环境变量 - 它是程序(如 mkdir)被找到的方式,而您正在覆盖它。您不应该这样做,但是如果必须这样做:

/bin/mkdir -p "$PATH/$DIR"

老实说,不要使用大写字母!在Bash中有很多保留或特殊变量,如果你无法记住它们所有,那就记住除一个外其他都是大写字母。在Bash中,变量是大小写敏感的,就像所有合理的编程语言一样。


你说:“……除了一个以外,其余都是大写字母。” 那个是哪一个? - rjmunro
@rjmunro PATH 必须大写,并且是一个特殊变量,因此应该是 DIR - cdarke
也许我误解了。你说“Bash中有很多保留或特殊变量...除了一个以外,所有变量都是大写的”。那个不是大写的保留/特殊变量是什么?还是这不是你想要说的? - rjmunro
1
在Bash 4中,现在有两个小写的shell变量auto_resumehistchars。请参阅man bash以获取Shell使用的变量列表,除了这两个变量外,其他所有变量都是大写的。 - cdarke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接