配列を繰り返す関数

配列を繰り返す関数

配列を繰り返す必要がある関数を呼び出すには、次のスクリプトを使用しています。

#!/bin/bash

function iterarr {
    for item in "$1"
    do
        echo "$item"
    done
}

myarr=(/dir1/file1.md /dir1/file2.md README.md)

iterarr "${myarr[@]}"

ただし、実行すると次のような結果が出力されます。

/dir1/file1.md

なぜ最初の配列項目だけを印刷するのですか?

編集する:もっと重要なのは、追加のパラメータを使用できるようにしたいということです(配列に加えて "$ @"を使用している場合は、2番目のパラメータにどのようにアクセスしますか?)

Ubuntu 16.04.03仕事

*$ $(which bash) --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

ベストアンサー1

iterarr "${myarr[@]}"拡張され、iterarr '/dir1/file1.md' '/dir1/file2.md' 'README.md'ループ内では最初のパラメータのみが参照されます"$1"。代わりに、"$@"すべてのパラメータにループを使用してください。

#!/bin/bash

function iterarr {
    for item in "$@"
    do
        echo "$item"
    done
}

myarr=(/dir1/file1.md /dir1/file2.md README.md)

iterarr "${myarr[@]}"

フラグまたは位置パラメータを処理するには、配列の前に置いて最初に処理します。完了すると、移動すると配列から削除されます"$@"

#!/bin/bash

function iterarr {
    echo "first argument is : '$1'"
    shift
    for item in "$@"
    do
        echo "$item"
    done
}

myarr=(/dir1/file1.md /dir1/file2.md README.md)

iterarr firstarg "${myarr[@]}"

おすすめ記事