루프 내부의 변수에 값 할당

루프 내부의 변수에 값 할당

이 코드가 있습니다.

HOSTS="host1 host2"
    For hostname in ${HOSTS} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
HOSTSN="test"
echo ${HOSTSN}
exit
EOF
Done 

변수가 HOSTSN비어 있습니다. 이유를 알려주실 수 있나요?

답변1

HOSTSN은 평가 중이므로 비어 있습니다.

do ssh -tt ${USERNAME}@${hostname} << EOF

실행. 대신 사용하면 echo \${HOSTSN}문제가 해결됩니다.

이 예를 고려하십시오. 여기에 'foo' 파일이 생성됩니다. 파일 생성시에는 내용이 실행되지 않습니다. 따라서 $NAME아무것도 설정되지 않았습니다.

$ cat >foo <<EOF
NAME=Steve
echo Hello ${NAME}
EOF
$

$ cat foo
Hello
$

문자 를 도입하면 \파일 생성 시 변수가 평가되지 않습니다.

$ cat >foo <<EOF
NAME=Steve
echo Hello \${NAME}
EOF
$

$ cat foo
Hello Steve
$

관련 정보