![파일에서 읽은 변수의 값을 다른 스크립트 내에서 바꾸기 [닫기]](https://linux55.com/image/116217/%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%9D%BD%EC%9D%80%20%EB%B3%80%EC%88%98%EC%9D%98%20%EA%B0%92%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EB%82%B4%EC%97%90%EC%84%9C%20%EB%B0%94%EA%BE%B8%EA%B8%B0%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
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
또는 더 위험한 것).