2009-07-30 76 views
1

我正在研究一个具有全局变量的BASH脚本。变量的值在函数/子例程中改变。但是,当我尝试在函数外部打印该变量时,该值不会改变。 示例代码如下:全局变量的值在BASH中没有变化

#!/bin/bash 

count= 

linux_f() 
    { 
     let count=100 
    } 

linux_f 

echo $count 

echo语句打印空白,而不是100 为什么全局变量的值不会在功能和出穿越。

+0

这是您的脚本中的错字?你正在设置一个变量`countl`,但你试图获得`count`的值。 – dreamlax 2009-07-30 09:58:35

+0

@dreamlax。是啊。对于错字感到抱歉。现在纠正。 – Viky 2009-07-30 10:02:14

+0

代码错误修复后的作品 – rasjani 2009-07-31 09:30:56

回答

2

您的代码对我的作品,打印100。这是我使用的代码:

count= 

linux_f() 
    { 
     let count=100 
    } 

linux_f 

echo $count 

编辑:我已经尝试过在MSYS上的bash版本2和Fedora Linux上的版本3,它对两者都有效。你确定你正在执行该脚本吗?尝试在这里放一个回声“这就是它”,只是为了确保显示某些东西。除此之外,我不知所措。

1

也许是因为您正在分配给countl而不是count

+0

@Manni。对不起,错字。其相同的变化 – Viky 2009-07-30 10:02:51

0

该变量赋值中存在拼写错误(在函数内部)。一旦固定它的工作:

[[email protected]:~]$ var=3 
[[email protected]:~]$ echo $var 
3 
[[email protected]:~]$ function xxx(){ let var=4 ; } 
[[email protected]:~]$ xxx 
[[email protected]:~]$ echo $var 
4 
[[email protected]:~]$ 

,并运行一个脚本:

[[email protected]:~]$ cat test.sh 
#!/bin/bash 

var= 
echo "var is '$var'" 
function xxx(){ let var=4 ; } 
xxx 
echo "var is now '$var'" 
[[email protected]:~]$ ./test.sh #/ <-- #this is to stop the highlighter thinking we have a regexp 
var is '' 
var is now '4' 
[[email protected]:~]$