재할당 없이 쉘 스크립트에서 변수를 다른 변수로 교체

재할당 없이 쉘 스크립트에서 변수를 다른 변수로 교체

쉘 스크립트에서 하나의 변수를 다른 변수로 바꾸려고 합니다. 하지만 빈 문자열로 표시됩니다. 아래는 그 장면입니다.

  1. 변수 "abc"를 포함하는 문자열에 "x"를 할당합니다.
~$ x="new value is \${abc}"
~$ echo $x
new value is ${abc}
  1. 다음은 abc-> 값을 정의하는 abc.sh 스크립트의 내용입니다.
#!/bin/bash
abc="something='123:234'"
xyz=$@
echo $xyz
  1. "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})로 대체됩니다. 그런 다음 쉘은 명령문을 다시 평가하고 올바른 문자열을 변수에 할당합니다.

관련 정보