Bash

遍歷數組的函式

  • October 27, 2017

我正在使用以下腳本,以便呼叫一個應該遍歷數組的函式。

#!/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

為什麼它只列印第一個數組條目?

編輯:更重要的是,我希望能夠使用一個額外的參數(除了數組,所以如果我使用’$@’,我如何訪問第二個參數?)

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>

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[@]}"

引用自:https://unix.stackexchange.com/questions/400846