我以前曾经从一个曾经有过一种享受的文件中生成一些变量的帮助。
我现在遇到的问题是这个过程是作为一个函数保存的,声明在该函数中。
有没有办法使用在函数外声明的变量?我只是得到一个空行返回
getVARS () {
while IFS== read -r name value; do
if [[ $name == \#* ]] || [[ $name == \-\-* ]]; then
echo $name" ignored"
else
declare -x "$name=$value"
fi
done < /home/admin/file.dat
unset IFS
}
上面的函数保存在一个单独的脚本中并以这种方式调用...
. /home/admin/functions
getVARS
echo "$VarA"
答案 0 :(得分:1)
问题在于使用声明
在声明中你可以阅读:
当在函数中使用时,declare使每个名称都是本地的,就像使用 本地命令。
因此,如果您想在功能之外使用,可以使用:
eval $name=$value
或
export $name=$value
答案 1 :(得分:1)
从bash
4.2开始,您可以将-g
选项添加到declare
,以使变量全局而非本地
getVARS () {
while IFS== read -r name value; do
if [[ $name == \#* ]] || [[ $name == \-\-* ]]; then
echo $name" ignored"
else
declare -gx "$name=$value"
fi
done < /home/admin/file.dat
}
请注意,您无需取消设置IFS
;将赋值放在read
之前的目的是将更改本地化为该命令。