在shell 函数中,echo输出的值 和return输出的值返回给调用函数的地方
ok,我们就可以利用这个特性,将数组在函数内部拆分位为一个个元素,然后使用echo一个一个的返回元素,为什么要一个一个,因为echo也不支持返回数组,如果你返回了数组,它只会返回数组的第一个元素.所以我们一个一个的返回数据,然后在函数调用的地方重新组合
1 # /bin/bash 2 3 fun1(){ 4 a=(1 2 3) 5 echo ${a[*]} 6 } 7 8 fun(){ 9 b=(`fun1`) # 这里加括号是为了组合数组 10 echo ${b[*]} 11 } 12 13 res=(`fun`) 14 echo ${res[*]}
返回数组的方式二:使用全局变量的方式
1 a=(4 5) 2 fun(){ 3 a=(1 2 3) 4 5 } 6 b=(`echo ${a[*]}`) 7 fun -- 注意fun 一定不能放在等式的右边,比如 res=`fun` ,如果这样做就拿不到下面的输出了 8 c=(`echo ${a[*]}`) 9 echo ${b[*]} 10 echo ${c[*]} 输出结果: 4 5 1 2 3
缺陷:使用这种方式只能直接调用函数或者linux命令,不能够``或者$()这样方式调用,涉及作用域问题,下面有讲解
在shell中默认都是全局变量,所以你可以在函数内部将数组赋值给全局变量,这样就能在调用函数之后拿到数组
不过一定要注意,不能带有`` 或者$()
1 a=(4 5) 2 fun(){ 3 a=(1 2 3) 4 5 } 6 b=(`echo ${a[*]}`) 7 res=`fun` -- 一旦加了`` 或者 $() 就不能拿到更改后的数组了,所以请使用上面的方式 8 c=(`echo ${a[*]}`) 9 echo ${b[*]} 10 echo ${c[*]} 输出结果: 4 5 4 5
shell 调用能够直接在linux终端调用的命令
能够在linux终端运行的命令在shell脚本中也能够运行 如果命令放在句首不需要加`` 或者 $() 如果命令放在赋值运算符的右边将命令执行的结果赋值给变量,这个时候命令就需要加``和$() 调用shell自己定义的函数