2009-07-30 78 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]:~]$