2013-02-20 63 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