Bash
遍歷數組的函式
我正在使用以下腳本,以便呼叫一個應該遍歷數組的函式。
#!/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[@]}"