파일에서 읽은 변수의 값을 다른 스크립트 내에서 바꾸기 [닫기]

파일에서 읽은 변수의 값을 다른 스크립트 내에서 바꾸기 [닫기]

xyz.cfg다음 값을 가진 구성 파일이 있습니다

NewYork|US|NewYork_${CUT_NO}_
Delhi|INDIA|Delhi_${CUT_NO}_

housekeeping.sh전역 변수가 포함된 스크립트가 있습니다.

CUT_NO=001

그리고 나는 파일을 while읽고 있습니다 .xyz.cfg

그러나 그 줄을 읽은 후에 ${CUT_NO}는 교체되지 않았습니다 .

o/p는 그래야 NewYork_001_ 하지만 알겠습니다 NewYork_${CUT_NO}_.

답변1

sed파일의 자리 표시자를 변수 값으로 바꾸는 데 사용됩니다 .

sed "s/\${CUT_NO}/$CUT_NO/" xyz.cfg

|그런 다음 -구분된 출력을 읽으십시오 sed.

sed "s/\${CUT_NO}/$CUT_NO/" xyz.cfg |
while IFS='|' read c1 c2 c3; do
  printf 'Column 3 has value "%s"\n' "$c3"
done

또는

sed "s/\${CUT_NO}/$CUT_NO/" xyz.cfg |
awk -F '|' '{ printf("Column 3 has value \"%s\"\n", $3) }'

또는 그런 것.

이로 인해

Column 3 has value "NewYork_001_"  
Column 3 has value "Delhi_001_"    

파일의 쉘 변수는 스크립트의 변수 값으로 대체되지 않으면 다른 텍스트처럼 읽혀집니다. 그것이 당신이 얻는 이유입니다 NewYork_${CUT_NO}_.

이를 수행하는 또 다른 방법은 문자열을 전달하고 NewYork_${CUT_NO}_( eval printf '%s\n' "$c3"'문자열이 다음과 같이 저장된 경우 $c3) 값을 다시 c3새 변수에 할당하는 것입니다. 그러나 eval이는 일반적으로 사용자 제공 데이터를 평가하는 데 안전하지 않은 것으로 간주됩니다(예: 마지막 열에 가치가 있다고 가정) NewYork_${CUT_NO}_;ls -l또는 더 위험한 것).

관련 정보