更新变量 ksh88 的参数

更新变量 ksh88 的参数

我正在尝试更新一个变量:

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

相关内容