考虑下面的脚本,它只是从列表中创建和打印数组:
$> cat my_script.sh
#!/bin/sh
function test_array {
export list_2="ai ia"
export list_2_array=($list_2)
echo list_2=$list_2
echo list_2_array=$list_2_array
}
export list="oi io"
export list_array=($list)
echo list=$list
echo list_array=$list_array
test_array编写脚本,将为集合变量和数组生成正确的值:
$> . my_script.sh
list=oi io
list_array=oi
list_2=ai ia
list_2_array=ai在脚本中运行函数仍然会为它们生成正确的值:
$> test_array
list_2=ai ia
list_2_array=ai然而,尽管正确设置了list_2,但list_2_array却无处可寻:
$> echo list_2=$list_2
list_2=ai ia
$> echo list_2_array=$list_2_array
list_2_array=我检查了自动完成功能,实际上,list_2_array甚至都没有设置。
这种行为背后的理由是什么?
发布于 2015-11-28 00:26:01
readonly内置函数也有同样的问题:
bash-4.4$ foo() { readonly a=(1);echo a=$a; }
bash-4.4$ foo
a=1
bash-4.4$ echo a=$a
a=可能这是一个bug,所以我建议你将这个问题报告给bug-bash,标题为“一个函数中由export/readonly内置创建的数组变量意外地变成了该函数的区域变量”。
https://stackoverflow.com/questions/33959261
复制相似问题