문자열을 에코하면 그 안에 문자열이 있습니다.

문자열을 에코하면 그 안에 문자열이 있습니다.

다음 내용이 포함된 텍스트 파일이 있습니다.

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!

관련 정보