
쉘 스크립트에서 하나의 변수를 다른 변수로 바꾸려고 합니다. 하지만 빈 문자열로 표시됩니다. 아래는 그 장면입니다.
- 변수 "abc"를 포함하는 문자열에 "x"를 할당합니다.
~$ x="new value is \${abc}"
~$ echo $x
new value is ${abc}
- 다음은 abc-> 값을 정의하는 abc.sh 스크립트의 내용입니다.
#!/bin/bash
abc="something='123:234'"
xyz=$@
echo $xyz
- "sh abc.sh $x" 명령을 실행하면 값 미만이 됩니다.
실제 -> 새 값은 ${abc}입니다.
예상됨 -> 새 값은 some='123:234'입니다.
위의 문제를 해결하는 데 도움을 주세요.
감사해요
답변1
value 를 삽입하면 new value is ${abc}
해당 ${abc}
부분은 단지 문자열입니다. 이렇게 하면 확장에 대해 문자열이 다시 평가되지 않습니다 xyz=$@
.
문자열을 확장하려면 ${abc}
스크립트에서 다음을 수행하세요.
abc="something='123:234'"
eval "xyz=\"$1\""
printf '%s\n' "$xyz"
eval
쉘 코드가 필요합니다 . 주어진 코드는 이를 수행 xyz="$1"
하지만 $1
명령줄 인수(strings new value is ${abc}
)로 대체됩니다. 그런 다음 쉘은 명령문을 다시 평가하고 올바른 문자열을 변수에 할당합니다.