for 루프의 변수를 참조하는 전역 변수가 올바르게 설정되지 않았습니다.

for 루프의 변수를 참조하는 전역 변수가 올바르게 설정되지 않았습니다.

여기 내 샘플 조각이 있습니다.

text="Var 1 is ${one}, Var 2 is ${two}, Var 3 is ${three}"
for (( i=0 ; i<1 ; i++ ))
do
 one="one"
 two="two"
 three="three"
 echo "${text}"
done

반품

Var 1 is , Var 2 is , Var 3 is

코드를 다음과 같이 변경하면 예상대로 작동합니다.

text="Var 1 is ${one}, Var 2 is ${two}, Var 3 is ${three}"
for (( i=0 ; i<1 ; i++ ))
do
 one="one"
 two="two"
 three="three"
 echo "Var 1 is ${one}, Var 2 is ${two}, Var 3 is ${three}"
done

답변1

이는 "text" 변수가 설정되면 다른 모든 변수가 비어 있고 기본값은 빈 문자열 ""이기 때문에 발생합니다.

text명령을 내릴 때 설정하고 (") 대신 (')로 저장하여 bash가 표현식을 평가하지 않도록 하세요 .

$ text='echo "var1 = $one var2 = $two"' 
$ one=hi
$ two=bye

그러면 eval $text돌아올 것이다var1 = hi var2 = bye

관련 정보