Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH:从函数返回数组输出_Bash - Fatal编程技术网

BASH:从函数返回数组输出

BASH:从函数返回数组输出,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

我目前正在编写下面的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
        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"