我有一个下面的代码,其中函数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 %'
答案 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
}
如果可能(实际上几乎总是可能的),请使用参数传递而不是全局变量。