无法在`Zsh`

时间:2015-08-26 11:53:21

标签: arrays linux shell unix zsh

我只是尝试将函数的参数指定为局部数组变量,我试过

$test_print(){local foo=( "${@:1}" ); echo $foo[*]}; test_print a b c

我得到了

test_print: bad pattern: foo=( a

但是,如果我删除local关键字

$test_print(){foo=( "${@:1}" ); echo $foo[*]}; test_print a b c

这是工作

a b c

这里有什么问题?如何将我的数组保存到局部变量?

其他信息

我在bash shell上尝试过此操作,它可以作为localglobal变量使用。

1 个答案:

答案 0 :(得分:2)

为了进行想要的赋值,你必须将foo的声明和值的赋值分成两个命令:

test_print(){local foo; foo=( "${@:1}" ); echo $foo[*]}; test_print a b c

根据ZSH Manual local行为类似typeset

  

** local [{+ | - } AEFHUahlprtux] [-LRZi [n]] [name [= value]] ...

     

与typeset相同,但不允许使用选项-g和-f。在这种情况下,-x选项不强制使用-g,即导出的变量将是函数的本地变量。

typeset的段落中,它说:

  

请注意,目前无法在排版表达式中分配数组,只能在标量和整数中分配。