스크립트에서 전달된 문자열의 내용을 가져옵니다.

스크립트에서 전달된 문자열의 내용을 가져옵니다.

출력에서 이 스크립트의 "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의 간접 변수 접근 방식이 더 좋습니다.

관련 정보