BASH:从函数返回数组输出
我目前正在编写下面的bash脚本,它从一个xml文档中读取并返回值city on holidayBASH:从函数返回数组输出,bash,Bash,我目前正在编写下面的bash脚本,它从一个xml文档中读取并返回值city on holiday xmlconfig="/home/scripts/sample.xml" dt=$(date +'%Y%m%d') cty=$(get-holiday-country "$dt" "$xmlconfig") echo "This are the cities:" echo "$cty" get-holiday-country() { declare -a arr
xmlconfig="/home/scripts/sample.xml"
dt=$(date +'%Y%m%d')
cty=$(get-holiday-country "$dt" "$xmlconfig")
echo "This are the cities:"
echo "$cty"
get-holiday-country()
{
declare -a arr
for q in `echo 'cat /holiday[@date="$1"]/country/@value' | xmllint --shell "$2" | awk -F\" '/=/ { print $2; }'`
do arr+=("$q")
done
}
但是,我在我创建的函数上得到一个空值,当单独运行for循环时,它正在工作
for q in `echo 'cat /holiday[@date="$1"]/country/@value' | xmllint --shell "$2" | awk -F\" '/=/ { print $2; }'`; do echo "$q"; done
您能帮我找出我做错了什么吗?示例XML文件:
<holiday date="20191225">
<country value="US">
<day value="today">
<job name="USJOB1"></job>
<job name="USJOB2"></job>
<job name="USJOB3"></job>
</day>
</country>
<country value="PH">
<day value="today">
<job name="PHJOB1"></job>
<job name="PHJOB2"></job>
<job name="PHMJOB3"></job>
</day>
</country>
</holiday>
declare
在函数中使用时,使变量成为它们的局部变量。此外,您甚至不尝试读取arr
数组,而是一个cty
数组,您在其他任何地方都不使用它。将声明移到函数外部,以避免使用局部变量,并确保每一次都使用相同的变量。bash 4+您可以declare-g
在函数内部使数组全局化。正如Aaron所建议的,您的示例似乎表明您没有使用您声明的数组。函数可以通过三种方式传递数据:使用数字出口值、stdout/stderr或填充全局变量。你没有做这些。如果希望$cty
包含任何内容,echo
或printf
在函数中包含该内容。在声明函数之前,脚本调用该函数。:cty=$(get holiday country“$dt”“$xmlconfig”)
请共享示例输入文件。没有数据就不容易复制问题。我已经解决了我的问题。我会把它贴在答案里。谢谢你们的帮助。
get-holiday-country()
{
arr=()
for q in `echo "cat /holiday[@date="$1"]/country/@value" | xmllint --shell "$2" | awk -F\" '/=/ { print $2; }'`
do
arr+=("$q")
done
echo ${arr[*]}
}
xmlconfig="/home/scripts/sample.xml"
dt=$(date +'%Y%m%d')
cty=$(get-holiday-country "$dt" "$xmlconfig")
echo "These are the cities:"
echo "$cty"