변수 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

관련 정보