我遇到过许多变量全部大写的shell脚本,我一直认为这是一个严重的误解。我的理解是,按照惯例(也许是很久以前的需要),环境变量全部大写。
但是在像Bash这样的现代脚本环境中,我总是倾向于对临时变量使用小写名称,而对导出(即环境)变量使用大写名称。
#!/usr/bin/env bash
year=`date +%Y`
echo "It is $year."
export JAVA_HOME="$HOME/java"
这一直是我对事情的看法。有没有权威人士同意或不同意这种方法,或者这纯粹是一个风格问题?
9条答案
按热度按时间6ie5vjzr1#
按照惯例,环境变量(
PAGER
,EDITOR
,...)和内部shell变量(SHELL
,BASH_VERSION
,...)都是大写的。所有其他变量名称都应该是小写的。请记住,变量名称区分大小写;该约定避免了意外地覆盖环境和内部变量。
遵循这个约定,您可以放心,您不需要知道UNIX工具或shell使用的每个环境变量,以避免覆盖它们。如果是您的变量,请将其小写。如果要导出它,请将其大写。
j91ykkif2#
任何遵循一致的命名惯例都会有帮助。下面是一些关于shell变量命名的有用提示:
示例:
LOG_DEBUG
LOG_INFO
LOG_ERROR
STATUS_OK
STATUS_ERROR
STATUS_WARNING
示例:
input_file
first_value
max_amount
num_errors
当局部变量与环境变量有某种关系时,请使用混合大小写,例如:一个月十四个月一个月一个月十五个月一个月
示例:
_debug
_debug_level
_current_log_file
例如:
inputArray
thisLooksBAD
、numRecordsProcessed
、veryInconsistent_style
另请参阅:
kyks70gy3#
如果要将shell变量导出到环境中,则值得考虑POSIX(2018年第7版)Environment Variable Definition指定:
POSIX.1-2017的Shell和Utilities卷中的实用程序所使用的环境变量名称仅由可移植字符集中定义的字符中的大写字母、数字和下划线(
_
)组成,并且不以数字开始。...
包含小写字母的环境变量名称的命名空间是为应用程序保留的。应用程序可以使用此命名空间中的名称定义任何环境变量,而无需修改标准实用程序的行为。
vjrehmav4#
我怀疑是否有权威来源,但这似乎是一个相当普遍的事实标准。
hlswsv355#
实际上,“环境变量”一词似乎是最近才出现的。Kernighan和Pike在他们1984年出版的经典著作《UNIX编程环境》中只谈到了“shell变量”--索引中甚至没有“环境”的条目!
jei2mxaa6#
这只是一个非常广泛举行的会议,我怀疑有任何“权威”的来源。
42fyovps7#
我倾向于对环境变量和全局变量都使用ALL_CAPS。当然,在Bash中没有真实的的变量作用域,所以有很大一部分变量用作全局变量(主要是设置和状态跟踪),而相对较少的“局部变量”(计数器、迭代器、部分构造的字符串和临时变量)
z9zf31ra8#
Bash和大多数shell脚本解释器都可以识别函数中的全局变量和局部变量如前所述,“POSIX.1-2017的Shell和实用程序卷中的实用程序所使用的环境变量名仅由大写字母、数字和下划线(_),并且不以数字开始。...包含小写字母的环境变量名称的命名空间是为应用程序保留的。应用程序可以使用此命名空间中的名称定义任何环境变量,而无需修改标准实用程序的行为。”(POSIX IEEE Std 1003.1-2008 section 8.1)
yqkkidmi9#
ALL_CAP太丑,无法快速识别!!!!!!!!!!!!!!!!!!!!!
x1c 0d1x参考值:https://uxmovement.com/content/all-caps-hard-for-users-to-read
对于我自己的配置,我使用我想要的任何配置:
(And因为颜色和格式的原因,我更喜欢屏幕截图而不是粘贴文本)