【问题标题】:mkdir command not found in bash script在 bash 脚本中找不到 mkdir 命令
【发布时间】:2015-07-01 19:34:22
【问题描述】:

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

#!/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

【问题讨论】:

  • 您正在修改$PATH!这正是您应该避免使用大写变量名的原因。
  • 不要使用ALL_CAPS 变量名。正是因为这个原因。它们被“保留”以供 shell 使用。

标签: bash mkdir


【解决方案1】:

变量PATH 是一个重要的环境变量——它是程序(如mkdir)被发现并覆盖它的方式。你不应该这样做,但如果你必须这样做:

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

但老实说,不要使用大写字母! Bash 中有很多保留变量或特殊变量,如果您不记得所有变量,请记住除了一个之外的所有变量都是大写的。 Bash 中的变量是区分大小写的,就像在所有合理的编程语言中一样。

【讨论】:

  • 您说“...除了一个以外,其他都大写。”哪一个?
  • @rjmunro PATH 必须是大写,是特殊变量,所以是DIR
  • 也许我理解错了。您说“bash 中有很多保留或特殊变量......除了一个都大写”。一个不是大写的 bash 保留/特殊变量是什么?或者这不是你想说的?
  • 在 Bash 4 中,现在有两个 shell 变量是小写的 auto_resumehistchars。请参阅man bash 以获取 shell 使用的变量列表,除了这两个变量之外,所有变量都是大写的。
【解决方案2】:

不要使用变量PATH。此变量包含用于搜索可执行程序的目录列表。由于您要替换它,因此脚本无法再找到 mkdir 程序。

一般情况下,避免使用全部大写的变量,这些通常用作shell或其他程序的参数。

【讨论】: