これは私のコードです。
$ abc_1='hello world'
$ abc_2='now is the time'
$ for i in {1..2}; do var=abc_$i;echo ${!var}; done
出力:
こんにちは、今の
時間です
doループ内の2つのステートメントをどのように簡単で効率的なステートメントに組み合わせることができますか?
私は成功せずに次のことを試しました。
echo ${!abc_$i}
echo ${!{abc_$i}}
echo ${!abc_${i}}
echo ${!abc_!{$i}}
ありがとうございます。
答え1
ああ、寝て、そうしないでください。数値で索引付けされたデータがある場合は、プログラミング言語と同様に配列を使用してください。
arr=('hello world' 'now is the time')
for i in "${!arr[@]}"; do
printf "element at index %s is '%s'\n" "$i" "${arr[i]}"
done
文字列で索引付けされたデータがある場合は、連想配列を使用してください。
たとえば、参照してください。https://mywiki.wooledge.org/BashGuide/Arrays
答え2
私のコードは少し見苦しくなりましたが、ここには次のようなものがあります。
for i in {1..2}; do var="abc_$i";echo $(eval echo \$$var); done
アイデアは、変数名とeval
変数の使用法を作成することです。echo
バックスラッシュが必要です。それ以外の場合、変数は$$
解釈されます。
PS おそらく配列の使用を検討するのが賢明かもしれません。