我只是尝试将函数的参数指定为局部数组变量,我试过
$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上尝试过此操作,它可以作为local
或global
变量使用。
答案 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
的段落中,它说:
请注意,目前无法在排版表达式中分配数组,只能在标量和整数中分配。