2
回答
Shell脚本如何传递数组参数或Shell中有引用传递吗?
华为云实践训练营,热门技术免费实践!>>>   

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)



<无标签>
举报
zgw06629
发帖于2年前 2回/3K+阅
顶部