[bash질문] 변수참조<->문자열그대로 읽기 왔다갔다 할수

hoollahoop의 이미지

${KKK}가 환경변수라서 안에 값이 있습니다.
한번은 문자열 그대로 읽고 싶고, 또 나중에는 변수값으로
읽고 싶습니다. 어떻게 해야 하나요...

#!/bin/sh

t='${KKK}'

if [ ${t:0:1} = '$' ]
then
echo $t
fi
echo $t

netj의 이미지

hoollahoop wrote:
${KKK}가 환경변수라서 안에 값이 있습니다.
한번은 문자열 그대로 읽고 싶고, 또 나중에는 변수값으로
읽고 싶습니다. 어떻게 해야 하나요...

#!/bin/sh

t='${KKK}'

if [ ${t:0:1} = '$' ]
then
echo $t
fi
echo $t

$KKK에 변수 이름이 들어있다는 말인가요?
${!KKK}와 같이 쓰면 KKK에 든 값에 해당하는 이름의 변수의 값을 꺼낼 수 있습니다.

a=b
b=c일 때,
echo ${!a}는
echo $b와 같고
echo c와 같습니다.
c가 찍히죠.

hoollahoop의 이미지

netj wrote:
hoollahoop wrote:
${KKK}가 환경변수라서 안에 값이 있습니다.
한번은 문자열 그대로 읽고 싶고, 또 나중에는 변수값으로
읽고 싶습니다. 어떻게 해야 하나요...

#!/bin/sh

t='${KKK}'

if [ ${t:0:1} = '$' ]
then
echo $t
fi
echo $t

$KKK에 변수 이름이 들어있다는 말인가요?
${!KKK}와 같이 쓰면 KKK에 든 값에 해당하는 이름의 변수의 값을 꺼낼 수 있습니다.

a=b
b=c일 때,
echo ${!a}는
echo $b와 같고
echo c와 같습니다.
c가 찍히죠.

답변 감사합니다..
${KKK}에는 변수가 들어있는 것이 아니라 어떤 문자열이 들어있습니다..

${HOME}으로 예를 들면
제가 원하는 결과값은 다음과 같습니다.

${HOME} <-- 문자열 그대로..
/home/myaccount <-- 환경변수에 들어있는 값(문자열)

일반 변수에는 말씀하신것 처럼 잘 됩니다만
앞에 $가 붙어있으면 처리하기가 좀 힘드네요..

아무도 안볼거 같은 예감이.. ^^;
쉬운거 같은데도 못하겠네요 ㅠ.ㅠ

Fe.head의 이미지

[ch.leem@will ~]$ echo ${HOME}
/home/ch.leem
[ch.leem@will ~]$ echo \${HOME}
${HOME}

이걸 말씀하시는건가요?

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

hoollahoop의 이미지

fehead wrote:
[ch.leem@will ~]$ echo ${HOME}
/home/ch.leem
[ch.leem@will ~]$ echo \${HOME}
${HOME}

이걸 말씀하시는건가요?


답변 감사합니다..
제 질문이 명확하지가 않은거 같네요.. 죄송합니다.
콘솔에서 그냥 echo 로 하면 잘 되겠지만..
아래 같은 경우, t에 이미 ${HOME}라는 문자열로
들어가버렸기 때문에 처리가 어렵습니다. ㅠ.ㅠ
제가 뭔가 잘못알고 있는건지...

조언 부탁드립니다.

#!/bin/sh

t='${HOME}'

if [ ${t:0:1} = '$' ]
then
echo $t <-- 여기서는 그냥 ${HOME}으로 출력
fi
echo $t <-- 여기서는 /home/myaccount로 출력 하고 싶습니다ㅠ.ㅠ

ganadist의 이미지

이거 말씀인가요?

[ganadist@tkp ~]$ t='${HOME}'
[ganadist@tkp ~]$ echo $t
${HOME}
[ganadist@tkp ~]$ eval echo $t
/home/ganadist

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

최종호의 이미지

뭔가 다른 쉘구문이 있을 듯 한데, 그냥 말씀하신 일만 하신다면

#!/bin/bash

t='${HOME}'

if [ ${t:0:1} = '$' ]
then
    echo $t
fi
echo `eval echo $t`

도 원하는 결과를 돌려주네요.

hoollahoop의 이미지

ganadist님, 최종호님 감사합니다.

eval을 이용해서 해야하는군요..

다시 한번 감사드립니다.