我想从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
,但我的预期结果应该是数组。
答案 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
请注意细微的差别。