bu soru neredeyse iki yaşında farkındayım ama yukarıdaki cevapların hiçbiri aslında (@ata ve @ l0b0 verdiği cevapları) yapmak orijinal sorusuna gerçekçi cevap bulmaktan doğru bana yardımcı oldu. Soru, "bir diziyi bir bash işlevine nasıl iletebilirim?", @ata ise doğru olana yaklaştığında, yöntemin kendisi içinde kullanılacak gerçek bir diziyle bitmiyordu. Bir küçük ilaveler gereklidir. Şimdi
function do_something_with_array {
local tmp=$1[@]
local arrArg=(${!tmp})
echo ${#arrArg[*]}
echo ${arrArg[3]}
}
do_something_with_array anArray
misiniz doğru çıktı:
4
d
Yani, varsayarak bu biz işlevi tanımlarsınız nasıl bir yerde işlev do_something_with_array()
çağırmadan önce anArray=(a b c d)
vardı
Eğer bir öğeniz bazı element (ler) varsa ray boşluk içerebilir, IFS
'u SPACE dışındaki bir değere ayarlamalısınız, ardından işlevin dizini argümanlarını yerel dizilere kopyaladıktan sonra geri dönmelisiniz.
local tmp=$1[@]
prevIFS=$IFS
IFS=,
local arrArg=(${!tmp})
IFS=$prevIFS
Pekala, = çalışır ar echo: test() { yerel ref = $ 1 [@] pkg için $ {! ref} içinde; yapılan "1 $ pkg 2" } echo ar = (ABC) deney dizisinde boşluk ile kırılgan olacaktır "$ {! Ref}" 'ya da başka bir döngü içinde pkg için – johndir
kullanım 'ar elemanlar (örneğin, ar = (a "bc" d) '). –
@glenn jackman: seconded – ata