bashスクリプトは別の引数で自分自身を呼び出します。

bashスクリプトは別の引数で自分自身を呼び出します。

できません。

このスクリプトは、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

おすすめ記事