我遇到过许多变量都是大写的shell脚本,我一直认为这是一个严重的误解。我的理解是,按照惯例(也许是很久以前的需要),环境变量都是大写的。

但是在像Bash这样的现代脚本环境中,我总是喜欢使用小写字母表示临时变量,而只对导出变量(即环境变量)使用大写字母。例如:

#!/usr/bin/env bash
year=$(date +%Y)
echo "It is $year."
export JAVA_HOME="$HOME/java"

这一直是我对事物的看法。是否有任何权威来源同意或不同意这种方法,或者这纯粹是一个风格问题?


当前回答

这只是一个非常广泛的惯例,我怀疑是否有任何“权威”的来源。

其他回答

这只是一个非常广泛的惯例,我怀疑是否有任何“权威”的来源。

我做你做的事。我怀疑是否有一个权威的来源,但这似乎是一个相当普遍的事实标准。

如果要将shell变量导出到环境中,值得考虑的是POSIX (Issue 7, 2018 edition)环境变量定义指定:

Shell和utilities中实用程序使用的环境变量名 卷POSIX.1-2017仅由大写字母,数字和 下划线(_)从可移植字符集中定义的字符 不要以数字开头。

...

包含小写字母的环境变量名称空间为 预留给应用程序。应用程序可以定义任何环境变量 类的行为 标准的公用事业公司。

我倾向于对环境变量和全局变量都使用ALL_CAPS。当然,在Bash中没有真正的变量作用域,所以有相当一部分变量被用作全局变量(主要是设置和状态跟踪),而相对较少的“局部变量”(计数器、迭代器、部分构造的字符串和临时变量)。

实际上,“环境变量”这个术语似乎是最近才出现的。Kernighan和Pike在他们1984年出版的经典著作《UNIX编程环境》中,只提到了“shell变量”——在索引中甚至没有“环境”的条目!