다음과 같은 test.sh 스크립트가 있습니다.
#!/bin/bash
echo "$1"
다음과 같이 다른 스크립트에서 이 스크립트를 호출합니다.
#!/bin/bash
declare -A val
val[first]="./test.sh ${value} | grep testing "
for KEY in "${!val[@]}"; do
value="testing"
echo "${val[$KEY]}"
done
echo "${val[$KEY]}"
반품./test.sh | grep testing
value 변수의 값을 인쇄하지 않습니다. 왜?
답변1
지금까지 스크립트에서는 변수를 정의했지만 평가하지는 않았습니다.
할당 "./test.sh ${value} | grep testing "
하지만 ${value}
다음과 같이 확장됩니다.이것일. 그러나 이 시점에서는 value
이를 정의하지 않았으므로 비어 있고 문자열은 "./test.sh | grep testing"
. 쉘이 변수를 확장하는 것을 방지하려면 큰따옴표( '
) 대신 작은따옴표( )를 사용하십시오."
'./test.sh ${value} | grep testing '
나중에 echo
변수의 값을 얻게 됩니다. 네가 원한다면구현하다./test.sh ...
평가해야 하는 변수에 저장하는 명령입니다.
eval "${val[$KEY]}"