为什么大多数 Bash 变量(BASH_VERSINFO、OLDPWD、HOSTTYPE)返回“未找到命令”

为什么大多数 Bash 变量(BASH_VERSINFO、OLDPWD、HOSTTYPE)返回“未找到命令”

我找到了许多 BASH 变量的列表,https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html

描述说,

这些变量由 Bash 设置或使用,但其他 shell 通常不会特殊对待它们。

第一个变量是,

BASH:用于执行当前 Bash 实例的完整路径名。

但是当我BASH在终端输入时我得到bash: BASH: command not found

我可以确认echo $0我正在使用bash.

同样,当我运行时,BASH_VERSINFO我得到相同的输出,即使命令的描述说:

一个只读数组变量(参见数组),其成员保存此 Bash 实例的版本信息。分配给数组成员的值如下:

BASH_VERSINFO[0] 主版本号(发行版)。

BASH_VERSINFO[1] 次版本号(版本)。

BASH_VERSINFO[2] 补丁级别。

BASH_VERSINFO[3] 构建版本。

BASH_VERSINFO[4] 发布状态(例如 beta1)。

BASH_VERSINFO[5] MACHTYPE 的值。

一些变量,例如hostname,pwd确实有效

答案1

您直接键入变量,然后 shell 会将您输入的内容解释为命令,并在 $PATH 变量中搜索同名命令的条目。由于您的 $PATH 中没有名称为 BASH 和 BASH_VERSINFO 的条目,因此您收到了“command not find”错误消息。另一方面,正如您所发现的,它们是有效的命令pwdhostname

您必须改为发出打印变量的命令(通常为echoprintf,都是 shell 内置命令),并提供您希望检查的变量作为命令的参数。请注意,命令名称通常完全由小写字母组成,而 shell 环境变量通常完全由大写字母组成。

要显示您提到的变量的值,请尝试以下操作:

$ echo "$BASH"
/bin/bash
$ for i in {0..4}; do printf "%d\t%s\n" "$i" "${BASH_VERSINFO[$i]}"; done
0   4
1   4
2   12
3   1
4   release

要打印数组变量,请使用语法“${ARR_NAME[$index]}”。 Bash 索引是从 0 开始的。一般来说,您应该将变量(包括数组)封装在双引号中以避免不必要的行为(省略引号相当于 split-glob 运算符,如下所示这里)。

答案2

pwd

是一个命令,原样

echo $BASH

然而

BASH

不是

相关内容