序
今天发生了在写 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`
来的好。