正确的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( PAGEREDITOR ,..)和内部shellvariables( SHELLBASH_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。

    示例: input_file first_value max_amount num_errors

    当局部variables与环境variables有某种关系时,混合情况如下: old_IFS old_HOME

  • 对“私人”variables和函数使用前导下划线 。 如果您编写的库函数在库文件或跨文件需要共享variables的情况下,与主代码中可能类似命名的任何内容相冲突,则这尤其相关。

    示例: _debug _debug_level _current_log_file

  • 永远不要使用骆驼案件 。 这将确保我们不会遇到大写错误造成的错误。

    例如: inputArray thisLooksBADnumRecordsProcessedveryInconsistent_style


也可以看看:

  • 开放组织基本规范问题7 – 环境variables