如何在shell脚本中将多个数组传递给函数,以及如何在函数中访问它

  • 本文关键字:函数 访问 数组 脚本 shell bash shell
  • 更新时间 :
  • 英文 :


我是shell脚本的新手,

我想传递两个字符串数组作为参数,并想在函数中访问它以进行进一步的操作。

请帮我一下。

谢谢。

当您将一个或数组传递给函数时,它实际上将每个元素作为参数传递。您可以从$@中检索所有数组
如果您知道每个数组的大小,则可以按大小对其进行拆分。否则,您需要一些棘手的方法来拆分数组。例如,传递另一个永远不会出现在这些数组中的参数
这是一个例子。

#!/bin/bash
func()
{
echo "all params: $@"
echo "para size: ${#@}"
p1=()
p2=()
i=1
for e in "${@}" ; do
if [[ "$e" == "|" ]] ; then
i=$(($i+1))
continue
fi
if [ $i -eq 1 ] ; then
p1+=($e)
else
p2+=($e)
fi
done
echo "p1: ${p1[@]}"
echo "p2: ${p2[@]}"
}
a=(1 2 3 4 5)
b=('a' 'b' 'c')
func "${a[@]}" "|" "${b[@]}"

这是脚本的输出。

$ ./test.sh
all params: 1 2 3 4 5 | a b c
para size: 9
p1: 1 2 3 4 5
p2: a b c

Bash在处理数组传递给函数方面并不出色,但它是可以做到的。您需要传递4个参数:number-of-elements-array1array1number-of-elements-array2array2。例如,你可以做:

#!/bin/bash
myfunc() {
local nelem1=$1               ## set no. elements in array 1
local -a array1
local nelem2
local -a array2

shift                         ## skip to next arg
while ((nelem1-- != 0)); do   ## loop nelem1 times
array1+=("$1")              ## add arg to array1
shift                       ## skip to next arg
done

nelem2=$1                     ## set no. elements in array 2

shift                         ## ditto for array 2
while ((nelem2-- != 0)); do
array2+=("$1")
shift
done

declare -p array1             ## output array contents
declare -p array2
}
a1=("My dog" "has fleas")
a2=("my cat" has none)
myfunc ${#a1[@]} "${a1[@]}" ${#a2[@]} "${a2[@]}"

示例使用/输出

$ bash scr/tmp/stack/function-multi-array.sh
declare -a array1=([0]="My dog" [1]="has fleas")
declare -a array2=([0]="my cat" [1]="has" [2]="none")

相关内容

  • 没有找到相关文章

最新更新