无法访问函数中的变量

时间:2018-12-06 13:56:26

标签: bash xargs

我有一个下面的代码,其中函数copy_from_tar无法访问程序外部定义的变量。 copy_from_tar未回显$file${id_from_doc[@]},但在输入函数后显示空白输出。

我希望访问$file$id_from_doc,它们是在函数外部定义的。如果有人有解决此问题的建议,请告诉我。

id_from_doc=(1 2)
file='file/path'
copy_from_tar(){
echo 'entered func'
echo ${id_from_doc[@]}
echo $file
}

export -f copy_from_tar
echo 'sample' | xargs -I % bash -c 'copy_from_tar %'

2 个答案:

答案 0 :(得分:0)

还导出变量。或者(更好的方法)使用while循环,如下所示:

id_from_doc=(1 2)
file='file/path'
copy_from_tar(){
    echo 'entered func'
    echo "${id_from_doc[@]}"
    echo $file
}

echo 'sample' | while read f
do
    copy_from_tar "$f"
done

答案 1 :(得分:0)

简化您的逻辑。除非有充分的理由未在此处列出,否则消除对bash的显式子调用,并重写函数以处理其中的迭代。

export id_from_doc=(1 2)
file='file/path'
copy_from_tar(){
    echo 'entered func'
    echo "${id_from_doc[@]}"
    echo $file

    for f in "${id_from_doc[@]}" # or whatever you really wanted
    do  : whatever logic was going to be here - e.g.
        foo-program "$f" "$file" > "$f.ext"
    done
}

如果可能(实际上几乎总是可能的),请使用参数传递而不是全局变量。