在zsh中,我如何將匿名數組傳遞給函數?例如尋找類似:在zsh中,我如何將匿名數組傳遞給函數?
foo() {
echo ${1[2]} '\n';
}
a=(abc def ghi)
foo $a
--> def
或理想:
foo (abc def ghi)
在zsh中,我如何將匿名數組傳遞給函數?例如尋找類似:在zsh中,我如何將匿名數組傳遞給函數?
foo() {
echo ${1[2]} '\n';
}
a=(abc def ghi)
foo $a
--> def
或理想:
foo (abc def ghi)
想出了一個解決辦法:
foo() {
local a=$1
local b=$2
echo ${(j:---:)${=b}}
foreach d in ${${=b}}
do
echo $d
done
}
如果參數2是白色的分隔文本,例如串'badkljf odod'
這可能是您的特定未表達需求的解決方法,但與問題幾乎沒有任何關係。對於這個問題,「如何拆分參數?」 – peth 2012-11-08 01:09:13
你不能。函數像其他命令一樣使用位置參數。
另請注意,您的解決方法不允許任何「數組」元素包含空格。
我能想到的最乾淨的事情就是要求調用創建一個本地數組,然後從功能閱讀:
$ foo() {
for element in $FOO_ARRAY
do
echo "[$element]"
done
}
$ local FOO_ARRAY; FOO_ARRAY=(foo bar baz quux)
$ foo
[foo]
[bar]
[baz]
[quux]
我知道bash所做的類似雜技其完成的系統,我想zsh也可能。這並不太常見。
沒有用一個匿名數組解決......但我試過這個東西! BASH !! ...
function join {
local tmp=($1)
for ((i=0 ; i<${#tmp[@]}-1 ; i++)) ; do
echo -n ${tmp[$i]}$2
done
echo ${tmp[$i]}
}
test="abc def ghi"
join "$test" "|"
您可以通過名數組函數,然後該函數可以通過解釋的名稱作爲變量名讀取陣列。這是一種技術,對於像bash中的關聯數組這樣的東西也是有用的。 ZSH使得它非常容易實現,因爲(P)操作符將以所需的方式解釋變量。
一個例子會說明這一點。如果定義了此功能:
function i_want_array() {
local array_name=$1
echo "first array element is: " ${(P)${array_name}[1]}
}
然後將下面的代碼將執行它:
% a=(one two three)
% i_want_array "a"
first array element is: one
而只是爲了澄清,這部作品由真正的陣列上運行,所以任何空白正確處理:
% a=("one two" three)
% i_want_array "a"
first array element is: one two
如果您只需要一個數組參數:如尾參數。
foo() {
: if you have any leading non-array args, grab those first:
local arg1="$1"
shift
local arg2="$1"
shift
: now [email protected] is your array arg
echo [email protected][2] '\n';
}
a=(abc def ghi)
foo "arg 1" arg2 $a
--> def
請注意,以上沒有任何實際工作。 – 2009-01-14 05:28:37