美文网首页
bash如何给函数传递数组参数

bash如何给函数传递数组参数

作者: CodingCode | 来源:发表于2021-11-06 23:39 被阅读0次

先说结论:bash函数不支持传递数组参数,只能传值;所以要传数组只能把数组展开,作为多个参数传,然后在函数内重新封装成数组。

举例:

#!/bin/bash

function foo() {
   typeset -a arr=("$@")
   for e in "${arr[@]}"; do
      echo "element: $e"
   done
}

array=(aa bb cc)
foo "${array[@]}"

运行结果:

element: aa
element: bb
element: cc

这里要注意的是对引号的使用不可少,否则如果数组元素中包含空格,则不能按照选用解析,例如:

#!/bin/bash

function foo() {
   echo "len1=${#@}"

   typeset arr=("$@")        # quotes
   echo "len2=${#arr[@]}"

   for e in "${arr[@]}"; do  # quotes
      echo "element: $e"
   done
}

array=(aa "b b" cc)

foo  ${array[@]}             # quotes

运行结果:

len1=4
len2=4
element: aa
element: b
element: b
element: cc

原数组中第二个元素"b b"被解析成了两个元素("b"和"b")。

第二个例子关于引号的:

#!/bin/bash

function foo() {
   echo "len1=${#@}"

   typeset arr=($@)        # quotes
   echo "len2=${#arr[@]}"

   for e in "${arr[@]}"; do  # quotes
      echo "element: $e"
   done
}

array=(aa "b b" cc)

foo "${array[@]}"            # quotes

运行结果:

len1=3
len2=4
element: aa
element: b
element: b
element: cc

还有第三个引号相关例子:

#!/bin/bash

function foo() {
   echo "len1=${#@}"

   typeset arr=("$@")        # quotes
   echo "len2=${#arr[@]}"

   for e in ${arr[@]}; do  # quotes
      echo "element: $e"
   done
}

array=(aa "b b" cc)

foo "${array[@]}"            # quotes

运行结果:

len1=3
len2=3
element: aa
element: b
element: b
element: cc

都是引号引发的数组解析错误。

相关文章

  • bash如何给函数传递数组参数

    先说结论:bash函数不支持传递数组参数,只能传值;所以要传数组只能把数组展开,作为多个参数传,然后在函数内重新封...

  • 数组参数: 参数数组: 注: 参数数组与数组参数的不同,在于函数的调用,调用参数数组的函数的时候,我们可以传递过...

  • Day61-shell编程_函数|数组

    函数 1.如何定义函数和调用函数 2.如何给函数传递一个参数 3.函数接收N多个参数传递 4.函数传参------...

  • 7月9号

    1 //数组作为函数参数,可以省略元素个数 //数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,...

  • C语言17 数组参数传递

    C语言17 数组参数传递 基本类型参数传递 数组作为参数 编写一个函数,能够打印任意整形数组的值 总结: 数组作为...

  • 函数式编程

    // 函数式编程思想/** 把函数当成普通数据类型来看待,可以存放再数组里,当做参数传递,赋值给变量 *给函数起正...

  • 对象传递

    一、对象作为函数参数 对象作为函数参数时,其传递过程较为复杂,传递方式比较独特。其伟参数过程和数组不同。传参...

  • golang值传递、指针传递

    函数参数传递过程中,数组是值传递的,切片是指针传递。 直接上代码:

  • php把函数作为参数传递!

    传递资源作为参数: 传递函数作为参数调用: 函数作为值赋给变量打印结果 函数赋值并调用,把结果当做值赋给变量 函数...

  • 2017.9.14

    对象数组、指针 对象数组不能通过参数传递初始化,要么默认构造函数。要么构造函数有默认参数。 内存空间的访问方式: ...

网友评论

      本文标题:bash如何给函数传递数组参数

      本文链接:https://www.haomeiwen.com/subject/sneszltx.html