forループ内のターミナルの関数パラメーターに配列を渡します


0

私は次のコードを持っています:

myfunc(){
    group=("$1")

    for i in "${group[@]}"
        do
            printf "%s\n" "$i"
        done
}

group配列内のすべてのアイテムを印刷するために使用しています。この配列は、ターミナルのパラメーターである必要があります。しかし、.bash_profileファイル内のターミナルで使用しようとすると、機能しません。私は次のコマンドを実行してこれを試みています:

myfunc ("one" "two" "three")

回答:


2

あなたはシェルが何らかの匿名配列変数を生成することを期待しているようです-でそれは不可能ですbash

簡単なアプローチは、個々の引数(適切に引用符で囲まれている場合は空白を含む場合があります)を渡し、次にそれらを参照することです "$@"

myfunc ()
{
    group=("$@");
    for i in "${group[@]}"
    do
        printf "%s\n" "$i"
    done
}

次に

$ myfunc "one nine" "two" "three four five"
one nine
two
three four five

この特定のケースでは、追加の配列変数の利点は見られません- "$@"直接ループオーバーすることもできます:

myfunc ()
{
    for i in "$@"
    do
        printf "%s\n" "$i"
    done
}

あなたはちょうどそれが呼び出し元のコンテキストで「アレイのように見える」にしたい場合は、その後、私はそれを行うために考えることができる唯一の方法は、としてそれを渡すことであろう文字列などmyfunc '("one nine" "two" "three four five")'して、evalあなたの関数内で割り当てeval group="$1"が、私はないないことをやってお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.