我正在尝试更新一个变量:
FLUX=first
DATE=`date +%Y%m%d_%H_%M`
justName=$FLUX
DIR_LOG=$REP_LOG_TD/DDL_TABLES_LOG/$justName'_'$DATE
if [ condition ]
then
justName=other
DIR_LOG=$DIR_LOG
fi
变量是目录日志我想更新只是名字什么时候状况是真的。
我想要的结果是
/root/log/DDL_TABLES_LOG/other_20181205_09_49
但我得到
/root/log/DDL_TABLES_LOG/first_20181205_09_49
如何更改只是名字成分?
答案1
如果你使用 分解它sh -x
,你会看到问题:
+ FLUX=first
++ date +%Y%m%d_%H_%M
+ DATE=20181205_12_25
+ justName=first
+ DIR_LOG=/test/DDL_TABLES_LOG/first_20181205_12_25
+ '[' true ']'
+ justName=other
+ DIR_LOG=/test/DDL_TABLES_LOG/first_20181205_12_25
请注意,DIR_LOG 变量是在评估条件之前设置的。即使条件计算结果为 true,您也会获得相同的 DIR_LOG 变量值。
要更改行为,请更改分配顺序,如下所示:
FLUX=first
DATE=$(date +%Y%m%d_%H_%M)
justName=$FLUX
if [ true ]
then
justName=other
fi
DIR_LOG=/test/DDL_TABLES_LOG/$justName'_'$DATE
再次,与sh -x
:
+ FLUX=first
++ date +%Y%m%d_%H_%M
+ DATE=20181205_12_28
+ justName=first
+ '[' true ']'
+ justName=other
+ DIR_LOG=/test/DDL_TABLES_LOG/other_20181205_12_28
使用这种方法,您首先设置 justName 变量的值,然后再评估 DIR_LOG 变量。这将为您提供所需的输出。
注意:为了方便起见,假设条件为真。当条件失败时,您将看到如下所示的输出:
+ FLUX=first
++ date +%Y%m%d_%H_%M
+ DATE=20181205_12_32
+ justName=first
+ false
+ DIR_LOG=/test/DDL_TABLES_LOG/first_20181205_12_32