できません。
このスクリプトは、targetとcommandという2つのパラメータを使用します。有効なターゲットが配列に割り当てられています。ターゲットが「all」の場合、スクリプトはすべてのターゲットを繰り返す必要があります。
#!/bin/bash
# recur.sh
targets=('aaa' 'bbb' 'ccc' 'ddd')
if [ "$1" == "all" ] ; then
for i in $targets ; do
echo $2" --> "$i
./$0 $i $2
done
exit 0
fi
echo "Target "$1" just received command '"$2"'"
exit 0
次のような結果が出ると予想されます。
$ recur all boggle
boggle --> aaa
Target aaa just received command 'boggle'
boggle --> bbb
Target bbb just received command 'boggle'
boggle --> ccc
Target ccc just received command 'boggle'
boggle --> ddd
Target ddd just received command 'boggle'
ただし、スクリプトは最初の反復で終了します。
$ recur all boggle
boggle --> aaa
Target aaa just received command 'boggle'
ベストアンサー1
問題は再帰ではなく繰り返し項目にあります。上記の方法を試してみると、目的の結果が得られません。
$ targets=(aaa bbb ccc ddd)
$ for i in $targets; do echo $i; done
aaa
配列を繰り返すには、配列の項目リストを作成する必要があります。たとえば、次のようになります。このリンク:
だからあなたは
#!/bin/bash
# recur.sh
targets=('aaa' 'bbb' 'ccc' 'ddd')
if [ "$1" == "all" ] ; then
for i in ${targets[@]}; do
echo $2" --> "$i
./$0 $i $2
done
exit 0
fi
echo "Target "$1" just received command '"$2"'"
exit 0