Shell

將數組傳遞給函式的最正確方法是什麼?

  • October 19, 2014

考慮我有一個非常大的數組$large_list,有沒有辦法編寫一個將數組作為參數的函式?例如:

echo_idx_array () {
   arr="$1"
   idx="$2"

   echo "${arr[$idx]}"
}

做這樣的事情的通常策略是什麼?我嘗試給出變數$large_list,但它是空的。

我願意修改函式以使其適應參數列表中的任何變化。

作為記錄,我正在使用 ksh88,並且我正在尋找盡可能便攜的答案。


編輯:到目前為止,我能想到的最好的方法是遍歷數組並將每個元素作為參數發送給函式。這看起來非常醜陋且容易出錯,更不用說它肯定會很快達到某個極限。這是我所做的:

foo () {
   echo $*
}

cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
   cmd="$cmd ${large_list[$i]}"
   ((i=i+1))
done

eval $cmd

沒有更好的事情可做嗎?

要將數組元素作為參數傳遞給函式,請使用 ksh 語法將數組元素展開為列表。

work_on_array "${myarray[@]}"

[@]後綴使其成為數組擴展。雙引號保護每個元素免於進一步擴展(拆分和通配)。擴展的結果通常不是一個單詞,就像通常用雙引號引起的那樣,而是與數組中的元素一樣多的單詞。

那麼數組的第N個元素是。要訪問它,您需要使用; 請參閱在另一個變數“內部”使用變數引用${*N*}``eval

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