私はこの質問には、ほぼ2歳実現するが、それは上記の回答のどれも実際に(@ataと@のl0b0の答え)を行わない元の質問に対する実際の答えを考え出すの方に助けてくれました。問題は "配列をbash関数に渡すにはどうすればいいですか?"ですが、@ataはそれに近づきましたが、メソッド自体は関数自体の中で実際に使用する配列で終わるわけではありません。 1つのマイナーな追加が必要です。
だから、我々は機能do_something_with_array()
を呼び出す前にどこかanArray=(a b c d)
を持っていたと仮定すると、これは、我々は関数を定義する方法を次のとおりです。今
function do_something_with_array {
local tmp=$1[@]
local arrArg=(${!tmp})
echo ${#arrArg[*]}
echo ${arrArg[3]}
}
do_something_with_array anArray
だろ正しく出力:
4
d
あなたのarのいくつかの要素がある可能性がある場合rayがスペースを含む場合は、IFS
をSPACE以外の値に設定してから、関数の配列argをローカル配列にコピーした後に戻ってください。
local tmp=$1[@]
prevIFS=$IFS
IFS=,
local arrArg=(${!tmp})
IFS=$prevIFS
さて、動作 "1つの$ VAR 2" エコーありません$ {!ref}の中で; は を行う "1 $ PKG 2" を}エコー行う AR =(ABC) テスト配列内のスペースに対して脆弱になります "$ {!REF}" 'あるいはループ内のPKG用 – johndir
使用' AR要素(例えば、 'ar =(a" bc "d"))。 –
@glenn jackman:seconded – ata