forループを介して他の関数を呼び出す関数呼び出し

forループを介して他の関数を呼び出す関数呼び出し

ループを使用して関数を呼び出し、for戻り値を変数に保存します。コードを実行するとcommand not foundエラーが発生します。何が問題なの?

#!/bin/bash

check_1()
{
    x_$1=$(check_2 $1)
}
check_2()
{
    ans=$((3+$1))
    echo $ans
}
for((i=1; i<=2;i++))
do
  check_1 $i
  tmp=x_$i
  echo ${!tmp}
done

上記のスクリプトを実行すると、次のような結果が得られます。

sample.sh: line 5: x_1=4: command not found
sample.sh: line 5: x_2=5: command not found

ベストアンサー1

この方法では変数名を定義することはできません。他の変数の値を使用して変数名を設定しようとしてもx_$1=foo機能しません。より良い方法は配列を使用することです。

#!/bin/bash

check_1()
{
    x[$1]=$(check_2 "$1")

}
check_2()
{
    ans=$((3+$1))
    echo "$ans"
}
for((i=1; i<=2;i++))
do
  check_1 "$i"
  echo "${x[$i]}"
done

上記の結果は次のとおりです。

$ sample.sh
4
5

おすすめ記事