変数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

関連情報