我找到了许多 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”错误消息。另一方面,正如您所发现的,它们是有效的命令pwd
。hostname
您必须改为发出打印变量的命令(通常为echo
或printf
,都是 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
不是