2013-02-20 28 views
0
function f(){ 
local y=$1; 
local z=$2; 
echo $x $y $z; 
} 
function main(){ 
x=1; 
y=2; 
z=3; 
f $y $z; 
} 

main $* 

我的輸出爲1 2 3通變量在bash功能(奇怪的輸出?)

爲什麼會出現這種情況?我只傳遞了兩個變量y和z。

$ 1將從main中返回y,即2返回到函數f local y = $ 1將會返回y = 2。對於局部z = $ 2同樣的事情,它會是z = 3。

所以我會,因爲我想呼應$ X是不是有效的變量假設有錯誤或者我應該得到2 3

爲什麼它呼應了1 2 3?

回答

2

$x是一個全局變量。它在函數內分配的事實不會改變這一點。

所以當然可以在f()或任何其他功能中看到。

+0

我是新來的bash,你能告訴我是什麼使它成爲一個全局變量? 事實上,我沒有將它作爲主要地方聲明,或者美元符號以某種方式使其成爲全球變量?我很困惑。這與我習慣的Java不同。 – user1880760 2013-02-20 21:15:23

+0

我添加了一個新函數: function g(){ echo $ x; } 它沒有打印出任何東西,所以從你所說的話它應該打印出x是1,但是隻有從主get得到的函數f輸出的回聲。 – user1880760 2013-02-20 21:19:59

+1

這就是bash的工作方式:除非聲明爲本地,否則變量是全局的。美元符號就是您如何訪問變量的值;它與範圍無關。 – chepner 2013-02-20 21:21:15