다음 내용이 포함된 텍스트 파일이 있습니다.
Hello \"${USER}\"!
Today you drank ${COFFEE_COUNT} coffees.
See you tomorrow!
이제 이러한 문자열이 할당되고 내보내지는 bash 스크립트를 실행하고 있습니다. 그러나 스크립트가 파일을 에코하면 문자열이 바뀌지 않습니다.
... code ...
export COFFEE_COUNT="$(some code)" #${USER} is set by default
... code ...
t=$(wc -l < ${scriptdir}/COFFEE);
for ((l=1;l<t;l++));
do
echo $(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE);
done;
... code ...
고양이도 일하지 않는다
cat "${scriptdir}/COFFEE";
이 작업을 수행할 수 있는 방법이 있나요?
원하는 출력:
Hello "username"!
Today you drank 3 coffees.
See you tomorrow!
답변1
bash는 코드의 변수만 확장하며, 데이터(또는 확장된) 데이터의 변수는 확장하지 않습니다. 대신 실리콘
echo $(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)
당신은해야합니다
eval echo \""$(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)"\"
답변2
이 문서가 작업을 수행할 수 있는데 왜 추가 파일을 사용합니까?
#!/bin/bash
export COFFEE_COUNT=$1 #${USER} is set by default
export USER=username
cat <<_EOT_
Hello "${USER}"!
Today you drank ${COFFEE_COUNT} coffees.
See you tomorrow!
_EOT_
실행 시:
$ ./script 13
Hello "username"!
Today you drank 13 coffees.
See you tomorrow!