正确的Bash和shell脚本可变大小写
我运行了很多带有variables的shell脚本,而且我一直认为这是一个严重的误解。 我的理解是,按照惯例(也许很久以前也是如此), 环境variables是全面的。
但是在像Bash这样的现代脚本环境中,我总是倾向于使用临时variables的小写名称的惯例,而对于导出的variables(即环境variables)我们总是使用大写的名称。 例如:
#!/usr/bin/env bash year=`date +%Y` echo "It is $year." export JAVA_HOME="$HOME/java"
这一直是我的事情。 是否有权威的消息来源同意或不同意这种方式,还是纯粹是一种风格?
按照惯例,环境variables( PAGER
, EDITOR
,..)和内部shellvariables( SHELL
, BASH_VERSION
,..)被大写。 所有其他variables名称应该是小写的。
请记住,variables名称区分大小写。 这个惯例避免了意外地压倒环境和内部variables。
遵循这个约定,您可以放心,您不需要知道UNIX工具或shell所使用的每个环境variables,以避免覆盖它们。 如果这是你的variables,小写它。 如果你输出它,大写。
我做你所做的。 我怀疑有一个权威的来源,但它似乎是一个相当普遍的事实标准。
实际上,“环境variables”这个词似乎是相当近的造币。 Kernighan和派克在1984年出版的经典着作“UNIX编程环境”中只提到了“shellvariables” – 索引中甚至没有“环境”条目!
这只是一个非常广泛的惯例,我怀疑是否有任何“权威”来源。
我倾向于使用ALL_CAPS环境和全局variables。 当然,在Bash中没有真正的variables范围,所以有很大一部分variables用作全局variables(主要是设置和状态跟踪),相对较less的“局部variables”(计数器,迭代器,部分构造的string和临时对象)
我总是看着它的方式是,如果Bash环境variables都是大写的,我应该出口我的方式,以保持统一。 Bash手册并没有说所有的环境variables都应该是大写的,但是大部分内置在bash中的环境variables都是大写的(我知道的唯一例外就是$ histchars)。
任何遵循的命名规则将始终有帮助。 这里有一些有用的shell命令提示:
-
对导出的variables和常量使用全部大写和下划线 。 在适用的情况下使用通用前缀,以便相关variables脱颖而出。
例子:
- 带有公共前缀的导出variables:
JOB_HOME
JOB_LOG
JOB_TEMP
JOB_RUN_CONTROL
- 常量:
PI
MAX_FILES
OK
ERROR
WARNING
- 带有公共前缀的导出variables:
-
使用“蛇状”( 所有小写字母和下划线 )作为范围为单个脚本或块的所有variables。
示例:
input_file
first_value
max_amount
num_errors
当局部variables与环境variables有某种关系时,混合情况如下:
old_IFS
old_HOME
-
对“私人”variables和函数使用前导下划线 。 如果您编写的库函数在库文件或跨文件需要共享variables的情况下,与主代码中可能类似命名的任何内容相冲突,则这尤其相关。
示例:
_debug
_debug_level
_current_log_file
-
永远不要使用骆驼案件 。 这将确保我们不会遇到大写错误造成的错误。
例如:
inputArray
thisLooksBAD
,numRecordsProcessed
,veryInconsistent_style
也可以看看:
- 开放组织基本规范问题7 – 环境variables