使用 Shell 变量的正确正确姿势

今天发生了在写 Shell脚本的时候发现了一个问题:变量赋值了却取不出来!

当时的代码是这么写的:

V_TS=`date +%Y%m%d`
TABLE_NAME=dwm_xxx_xxx_xxx_metric_day
TEMP_TABLE="es_$TABLE_NAME_$V_TS"

本意是原来的表名加一个前缀 es,加一个后缀日期。结果 TEMP_TABLE 赋值得到的结果是 es_20160303 !!!

仔细一分析,原来在这里把变量名 TABLE_NAME 识别成了 TABLE_NAME_

解决方案也很简单,把

TEMP_TABLE="es_$TABLE_NAME_$V_TS"

改成

TEMP_TABLE="es_${TABLE_NAME}_${V_TS}"

即可,不仅醒目而且消除了歧义!

延伸

扩展一下,上面

V_TS=`date +%Y%m%d`

的写法其实也不太好,用

V_TS=$(date +%Y%m%d)

其实更好。

无独有偶,在计算算数表达式的时候,VAR=$(( 1 + 3 )) 或者 VAR=$[ 1 + 3 ] 就比

VAR=`expr 3 + 1`

来的好。

发表评论

电子邮件地址不会被公开。 必填项已用*标注