使变量在函数外可用

时间:2016-12-20 11:38:49

标签: bash function shell variables

我以前曾经从一个曾经有过一种享受的文件中生成一些变量的帮助。

我现在遇到的问题是这个过程是作为一个函数保存的,声明在该函数中。

有没有办法使用在函数外声明的变量?我只是得到一个空行返回

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"

2 个答案:

答案 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之前的目的是将更改本地化为该命令。