【问题标题】:Bash. Variable visibility and lifetime重击。可变的可见性和寿命
【发布时间】:2017-01-15 08:32:05
【问题描述】:

我在 bash 方面没有经验,我遇到过一个让我感到困惑的案例。这是这种情况的一个例子:

f1()
{
  ar+=(1)
  ar+=(3)
  ar+=(2)
  var="var value"
  echo "0"
}

f2()
{

   res=$(f1)
   echo -------point 1--------
   for i in ${ar[@]}; do
       echo "El $i"
   done
   echo $var

   echo -------point 2--------
   f1>/dev/null
   for i in ${ar[@]}; do
       echo "El $i"
   done
   echo $var
}

f2

此脚本产生以下结果:

-------point 1--------

-------point 2--------
El 1
El 3
El 2
var value

如您所见,函数 f1 以两种不同的方式被调用,它们给出了截然不同的含义。在第一次调用中,在 f1 中声明的数组和变量显然被破坏了。 在第二种方式中,数组和变量被保存。

有人可以向我解释或给我相应手册的链接吗?

【问题讨论】:

    标签: linux bash function variables visibility


    【解决方案1】:

    当你这样做时:

    res=$(f1)
    

    您创建一个子shell,在子shell 中执行f1,并将输出存储到变量$res。在该子 shell 中创建的所有变量在关闭后都会丢失。

    当你这样做时:

    f1>/dev/null
    

    您在当前 shell 中执行 f1。在函数中创建的变量是在全局范围内,因此可以后续访问。

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 2016-10-17
      • 2012-09-24
      • 2012-03-11
      • 1970-01-01
      • 2020-09-18
      • 2016-03-29
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多