我給陣列作爲參數傳遞給這樣的功能:殼牌腳本數組語法
declare -a my_array=(1 2 3 4)
my_function (????my_array)
我想要的陣列被傳遞給函數,正如一個陣列,而不是作爲4個獨立的參數。然後在功能,我想通過像數組遍歷:
(以創建my_function)
for item in (???)
do
....
done
什麼應該是正確的語法(???)。
我給陣列作爲參數傳遞給這樣的功能:殼牌腳本數組語法
declare -a my_array=(1 2 3 4)
my_function (????my_array)
我想要的陣列被傳遞給函數,正如一個陣列,而不是作爲4個獨立的參數。然後在功能,我想通過像數組遍歷:
(以創建my_function)
for item in (???)
do
....
done
什麼應該是正確的語法(???)。
bash沒有數組文字的語法。您顯示的內容(my_function (1 2 3 4)
)是語法錯誤。您必須使用
my_function "(1 2 3 4)"
my_function 1 2 3 4
一個第一:
my_function() {
local -a ary=$1
# do something with the array
for idx in "${!ary[@]}"; do echo "ary[$idx]=${ary[$idx]}"; done
}
對於第二,只需使用"[email protected]"
或:
my_function() {
local -a ary=("[email protected]")
# do something with the array
for idx in "${!ary[@]}"; do echo "ary[$idx]=${ary[$idx]}"; done
}
一個不情願的編輯...
my_function() {
local -a ary=($1) # $1 must not be quoted
# ...
}
declare -a my_array=(1 2 3 4)
my_function "${my_array[#]}" # this *must* be quoted
這依賴於你的數據不包含空格。例如,這將不起作用
my_array=("first arg" "second arg")
你想通過2個元素,但是你會收到4強制轉換數組轉換成字符串,然後再擴展它是充滿了危險。
你可以用間接變量做到這一點,但他們是醜陋與陣列
my_function() {
local tmp="${1}[@]" # just a string here
local -a ary=("${!tmp}") # indirectly expanded into a variable
# ...
}
my_function my_array # pass the array *name*
嗨,感謝您的回覆。它工作得很好。但是,我遇到了另一個問題。我已經更新了我原來的帖子。你可以看看:> Bash對我來說很新,有時候我只是陷入了一些簡單的問題:> –
這似乎是一個任意的要求。爲什麼用這種方式來限制自己,當它讓你的生活變得更難? –
是的。你說得對。無論如何非常感謝您的答覆。看起來非常好。 –
你想要的「$ @」如果這是bash的。看[這個問題](http://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-bash-script)。 – Troy
@Troy我的參數是一個數組(單個參數)。看起來它不同於幾個參數的組合 –