変数 - 連合

変数 - 連合
FICH10=primero.sh
FICH20=segundo.sh

for i in 10 20
do
   echo $FICH($i)  # I want resolved first $i and then resolver var FICH10
done

$iまず解決し、海岸線に接続してFICHorの値を返しますが、数値を入力する必要はありませんが、ループを介して解決したいと思います。$FICH10$FICH20

関連する応答を解決できませんでした。

$ for i in 10 20
> do
> echo $((FICH$i))
> done
ksh: line 3: primero: parameter not set

答え1

変数間接の使用:

#!/bin/bash
fich10=primero.sh
fich20=segundo.sh

for i in 10 20 ; do
    var=fich$i
    echo ${!var}
done

注 変数名はシステム変数ではないため、小さな大文字を使用しています。

答え2

Bashバージョン4.3+では、「nameref」を使用できます。

for i in 10 20; do
    declare -n var="FICH$i"
    echo "$var"
done

変数置換の第2ラウンドを強制するために使用できますが、ご覧のようにevalこれは必須ではありません。eval通常、ほとんどの状況で使用するには危険すぎると考えられます。

関連情報