Shell脚本如何传递数组参数或Shell中有引用传递吗?

zgw06629 发布于 2015/07/09 21:18
阅读 4K+
收藏 0

Shell脚本如何传递数组变量?如:

$ export arr=(foo bar)
$ cat test_array_param.sh 
#!/bin/bash

echo $1
echo ${$1[@]}
echo ${arr[@]}

$ bash test_array_param.sh arr
arr
test_array_param.sh: line 4: ${$1[@]}: bad substitution

并且从上面的例子来看似乎子Shell不能识别到父Shell中的arr变量(即使已将其导出为环境变量)。

另外,即使在Shell脚本内部调用函数时传递数组也不可以,如下所示:

$ cat test_array_param.sh 
#!/bin/bash

a=(hello world)
test_pass_arr(){
	echo $1
	echo ${$1[@]}
}
test_pass_arr a

$ bash test_array_param.sh
a
test_array_param.sh: line 11: ${$1[@]}: bad substitution

Shell中能否传递数组参数?若能的话,到底该如何传递?

问题背景:

想从一个数组A中取出最右边的一个数放入另一个数组B中或相反的操作。效果如下

A=(3 2 1)
B=()

call move A B

A=(3 2)
B=(1)

move函数想写的简洁一点, 

# pop rightmost
length=${#$1[@]}
out=${$1[@]:length-1}
$1=(${$1[@]}:0:length-1)

#put new element to rightmost 
$2=(${$2[@]} $out)



加载中
0
Feng_Yu
Feng_Yu

bash的数组功能并不强,而且使用比较麻烦。很多时候应该尽量避免使用数组。

看过N多国内外的脚本,就没你这么用的,简直是把数组写到天荒地老的节奏

zgw06629
zgw06629
其实我就想直观展示汉诺塔游戏中的移动盘片,如从A柱中移动一个盘片到C柱中。 发现只能用数组 , 因没有其他数据结构如List、Stack等。想通过名称来获取对象,发现还没有map可用。
返回顶部
顶部