Bash - FOR [duplicate]を使用して数値サフィックスを持つ変数を繰り返す方法

Bash - FOR [duplicate]を使用して数値サフィックスを持つ変数を繰り返す方法

forループを使用してvar0、var1、var2、var3を宣言しました。 forループ内で変数をエコーする方法は?コードは次のとおりです。

#!/bin/bash

for i in {0..3}
do
  export var$i=$i
done;

そこでvar0、var1、var2、var3を定義しました。ループからどのようにアクセスできますか?

私は次を試しました

for i in {0..3}
do
  echo $var$i
  tmpvar=var$i
  echo $tmpvar
done

しかし、誰も私にvar0、var1の値を教えてくれませんでした。最初のエコーは「0,1,2,3」だけを印刷し、2番目のエコーは「var0、var1、var2、var3」を印刷しました。そうですか?私は価値が欲しい..

ベストアンサー1

一方、

var0=a
var1=b
var2=c

ksh93 または bash 4.3 以降の場合、namerefs を使用して個々の変数を指すことができます。

for i in 0 1 2; do
    typeset -n p="var$i"
    echo "$p"
done

ただし、変数は別々のスカラーとして明示的に必要であり(たとえば、環境を介して変数を渡すため)、厳密な標準シェルを使用せず、代わりにBashまたはkshを使用しない限り、配列を使用する必要があります。

#!/bin/bash
a=(a b c)
for i in 0 1 2; do
    echo "${a[i]}"
done

またはインデックスを無視してください。

for x in "${a[@]}"; do
    echo "$x"
done

(もちろん、Zshにはデフォルトで1からインデックスが付けられた配列もあるため、最初の配列は直接機能しません。)

おすすめ記事