スクリプトから渡された文字列の内容を取得します。

スクリプトから渡された文字列の内容を取得します。

出力からこのスクリプトの「for」内容を取得したいと思いますKW0_TEXTKW1_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の間接変数アプローチがより優れています。

関連情報