변수를 업데이트하려고 합니다.
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