从ENV变量读取时Bash脚本局部变量命名

时间:2014-03-18 01:06:14

标签: bash shell

对于bash脚本,我通常遵循以下规则:局部变量应为小写,环境变量应为大写。这样我就可以避免意外覆盖环境变量。我正在编写Tomcat启动脚本,并且我从环境变量部分创建了一个tomcat_log变量。

tomcat_log=${TOMCAT_HOME}/logs/tomcat-initd.log

现在我想读入一个可能有默认值的环境变量。它应该是大写还是小写?

# uppercase
CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"

# lowercase
connector_port="${CONNECTOR_PORT:-8080}"

它是一个局部变量,但它也是从环境变量中读取的。我很好奇人们倾向于遵循哪些惯例。

2 个答案:

答案 0 :(得分:3)

小写。原因如下:

如果你这样做:

CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"

...然后你不知道CONNECTOR_PORT变量是否被标记为导出为非。也许它是作为环境变量传递的,并且设置了该标志,或者它没有,它没有。如果你想遵循约定,具有一致的行为,并希望保留一个大写的变量名,那么你需要强制它自己导出:

export CONNECTOR_PORT="${CONNECTOR_PORT:-8080}"

如果你这样做:

connector_port="${CONNECTOR_PORT:-8080}"

...然后很明显,connector_port未被标记为导出到子流程,无论您的父母是否CONNECTOR_PORT导出给您。

答案 1 :(得分:0)

正如您已经说过,在脚本中使用小写变量名称是个好主意。

如果我遵循你的惯例那么它应该是小写的。从您处理脚本中的环境变量数据的位置开始,数据将从其原始范围“分离”。

最后我会说这是一个品味问题,也许是主观的,并且取决于观点。