Shell: 传数组给函数, 函数接受数组参数,Passing array to function of shell script

 

直接先上代码:

myFunction(){
  param1=("${!1}")
  param2=("${!2}")
  for i in ${param1[@]}
  do
    for j in ${param2[@]}
    do
       if [ "${i}" == "${j}" ]
       then
           echo ${i}
           echo ${j}
       fi
    done
  done
}

a=(foo bar baz)
b=(foo bar qux)
myFunction a[@] b[@]

或者:

#!/bin/bash

function showArr(){
    arr=$1

    for i in ${arr[*]}; do
        echo $i
    done
}

regions=("GZ" "SH" "BJ")
showArr "${regions[*]}"
exit 0

输出:

./test.sh
GZ
SH
BJ

个人做的改进是:

declare -a folders=('assets' 'css' 'fonts' 'js' 'jsons' 'pages')

in_array()
{
    local haystack=[@]
    local needle=
    local output=0

    for i in ${!haystack}; do
        if [[ ${i} == ${needle} ]]; then output=1; fi
    done

    echo ${output};
}

用法:

in_array folders css

 

拓展一:遍历数组 Iterate Through Array Values

定义数组:

array=( one two three )
files=( "/etc/passwd" "/etc/group" "/etc/hosts" )
limits=( 10, 20, 26, 39, 48)

打印数组:

printf "%s\n" "${array[@]}"
printf "%s\n" "${files[@]}"
printf "%s\n" "${limits[@]}"

遍历数组:

for i in "${arrayName[@]}"
do
   : 
   # do whatever on $i
done

或者文件

#!/bin/bash
# declare an array called array and define 3 vales
array=( one two three )
for i in "${array[@]}"
do
	echo $i
done

 

拓展二:声明或显示shell变量

readonly DATA=/usr/home/data/file.dat

#或者
declare -r var=123

declare命令用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。

语法

declare(选项)(参数)

选项

+/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
-f:仅显示函数;
r:将变量设置为只读;
x:指定的变量会成为环境变量,可供shell以外的程序来使用;
i:[设置值]可以是数值,字符串或运算式。

参数

shell变量:声明shell变量,格式为“变量名=值”。

局部变量的作用域被限定在创建它们的shell中。local函数可以用来创建局部变量,但仅限于函数内使用。局部变量可以通过简单的赋予它一个值或一个变量名来设置,用declare内置函数来设置,或者省略也可。
格式:
变量名=值
declare 变量名=值

环境变量通常又称全局变量,以区别于局部变量,通常,环境变量应该大写,环境变量是已经用export内置命令导出的变量。子shell继承当前父shell的环境变量,并能一直传承下去,但是不可逆向传递。
格式:
export 变量=值
declare -x 变量=值

local一般用于局部变量声明,多在在函数内部使用。
(1)shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。
(2)shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。
(3)如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。

使用举例:

#!/bin/bash
function Hello()
{
        local text="Hello World!!!" #局部变量
        echo $text
}
 
Hello

 

本文:Shell: 传数组给函数, 函数接受数组参数,Passing array to function of shell script