ループを使用して関数を呼び出し、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