因工作需要,需要使用shell开发一些小工具,当使用数组作为函数参数时,发现只能传递数组的第一个元素,数组后面的元素不能传递到函数内。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
把代码保存为test.sh后执行,只输出了第一个元素。
- 1
- 2
$1表示获取函数的第一个参数,而函数的第一个参数就是regions数组,这样就奇怪了,为什么只能获取到数组的第一个元素呢?
经测试,
- 1
只会输出第一个元素,所以使用regions作为参数传递,只会传递第一个元素。
因此需要把参数写成 “${regions[*]}” 才可以作为数组传递。
代码修改后如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
运行后输出数组所有元素,因此修改后可以把数组作为函数参数传递使用。
数组做参数的关键:
一、测试脚本
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo $10
二、构造数组
atest=("a" "bb cc" "dd ee ff" "gg hh ii jj")
三、测试
atest为数组。此时若把这个数组的内容作为参数调用另一个shell脚本时,写法很关键。
第一种写法:./test.sh ${atest[@]}
执行结果:
a
bb
cc
dd
ee
ff
gg
hh
ii
a0
此时传递的参数为a bb cc dd ee ff gg hh ii jj。把数组的内容组成了一个字符串,已经破坏了原来数组的结构。
第二种写法:./test.sh “${atest[@]}”
执行结果:
a
bb cc
dd ee ff
gg hh ii jj
a0
把数组用双引号括起来,此时传递到test.sh中的参数仍然为数组的原来结构。