如何从bash函数返回数组

时间:2019-06-05 08:28:41

标签: arrays bash shell

我想从bash上的函数返回一个数组,并在另一个函数中使用此数组。但是我得到了一个字符串,而不是一个数组,请您帮我看看如何从bash函数返回数组,我是bash脚本的新手,谢谢。

array(){
          local words=("a a" "b b" "c c")
           echo ${words[@]}
    }

    getWord(){
           words=$(array)
           for word in "${words[@]}"; do
                echo "$word"
            done
    }

    getWord

它返回字符串a a b b c c,但我的预期结果应该是数组。

1 个答案:

答案 0 :(得分:3)

实际上,查看您的代码,您不需要返回任何内容; “ words”变量是全局变量,因此可以在整个脚本中使用。

解决方法:

编辑:

#!/bin/bash

array(){
       local words=("a" "b" "c")
       echo "${words[@]}"
}

getWord(){
       local arr=( $(array) )
       for word in "${arr[@]}"; do
            echo "$word"
        done
}

getWord

EDIT2:

#!/bin/bash

orig_IFS="$IFS"
array_IFS="," #Or whatever you want, mb a safer one

array(){
       IFS="${array_IFS}"
       local words=("a a" "b b" "c c")
       echo "${words[*]}"
       IFS="${orig_IFS}"
}

getWord(){
       IFS="${array_IFS}"
       arr=( $(array) )
       IFS="${orig_IFS}"
       for word in "${arr[@]}"; do
            echo "$word"
        done
}

getWord

EDIT3 :按照@Kamil Cuk的建议

#!/bin/bash

array_IFS=$'\ca' #Maybe this is safer than using a single comma

array(){
       IFS="${array_IFS}" local words=("a a" "b b" "c c")
       echo "${words[*]}"
}

getWord(){
       IFS="${array_IFS}" arr=( $(array) )
       for word in ${arr[@]}; do #we don't need double quotes anymore
            echo "$word"
        done
}

getWord

请注意细微的差别。