![재할당 없이 쉘 스크립트에서 변수를 다른 변수로 교체](https://linux55.com/image/162844/%EC%9E%AC%ED%95%A0%EB%8B%B9%20%EC%97%86%EC%9D%B4%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EB%8B%A4%EB%A5%B8%20%EB%B3%80%EC%88%98%EB%A1%9C%20%EA%B5%90%EC%B2%B4.png)
쉘 스크립트에서 하나의 변수를 다른 변수로 바꾸려고 합니다. 하지만 빈 문자열로 표시됩니다. 아래는 그 장면입니다.
- 변수 "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}
)로 대체됩니다. 그런 다음 쉘은 명령문을 다시 평가하고 올바른 문자열을 변수에 할당합니다.