출력에서 이 스크립트의 "for" 내용을 가져오고 싶습니다 KW0_TEXT
.KW1_TEXT
#!/bin/sh
STRS=" KW0 KW1 "
KW0_TEXT="text text text"
KW1_TEXT="text text text text"
for str in ${STRS}; do
echo ${str}_TEXT
eval echo ${str}_TEXT
done
지금까지 출력 결과는 다음과 같습니다.
KW0_TEXT
KW0_TEXT
KW1_TEXT
KW1_TEXT
답변1
/bin/sh가 실제로 /bin/bash라면 변수 간접 참조를 사용할 수 있습니다.
#!/bin/bash
STRS=" KW0 KW1 "
KW0_TEXT="text text text"
KW1_TEXT="text text text text"
for str in ${STRS}; do
var=${str}_TEXT
printf "%s\n" "${!var}"
done
답변2
/bin/sh가 실제로 /bin/bash이고 버전이 상당히 새로운 경우 연관 배열을 사용할 수 있습니다.
#!/bin/bash
strs=( KW0 KW1 )
declare -A text=(
[KW0]="text text text"
[KW1]="text text text text"
)
for str in "${strs[@]}"; do
printf "%s\t%s\n" "$str" "${text[$str]}"
done
KW0 text text text
KW1 text text text text
답변3
문제는 사용법 $
에 텍스트가 누락되어 있다는 것입니다 eval
. 변수를 대체한 후 평가하려는 명령은 다음과 같습니다.
echo KW0_TEXT
하지만 당신은 원해요
echo $KW0_TEXT
그것은해야한다:
eval echo '$'${str}_TEXT
그러나 이를 지원하는 셸을 사용하는 경우 Jeff Schaller의 간접 변수 접근 방식이 더 좋습니다.