2017-03-18 37 views
0

我在Ubuntu Shell中工作,但我也希望它也能在UNIX上工作。
这里是我的代码:unix中函数变量的作用域

#!/bin/bash 

func() 
{ 
    x=42 
} 

x=9 
func 
echo $x 
  • 为什么全球x改为42,当我在为变量的作用域UNIX不同的规则改变只局部变量x
  • 是?
  • 有没有一种方法如何将func的返回值设置为全局变量,以后可以在代码中使用?

谢谢!

+0

本地/申报是研究 – grail

+0

答案最基本的bash的问题可以在手册中找到的选项:https://tiswww.case.edu/php/chet/bash/bashref.html – ccarton

回答

0

首先,你不是编程Linux;你实际上正在编写一个名为bash的shell程序的函数。在命令行上输入info bash以获取相关文档。对于任何版本的Unix,命令行会发生什么情况取决于您正在运行哪种类型的shell(有很多;大多数Linux系统默认为bash)。

未声明的函数中的变量默认为全局变量。如注释所述,您可以使用local将变量标记为函数的本地。

+0

谢谢! 关于那个返回值,有没有一些方法? 类似于'var = $(fun)'的东西' – SevO

+0

这有点奇怪。您可以打印结果,然后将结果捕获到一个变量中:'$ func(){local x; X = “fred的”; echo $ x; }; $ wilma = $(func);或者,您可以返回一个整数作为错误代码:'$ func(){return 42};或者,您可以返回一个整数作为错误代码:'$ func(){return 42}; $ echo $ wilma'打印“fred” –

+0

。 FUNC; ERR = $ ?; echo $ ERR'这将打印42.(注意return语句和'}'之间必须有一个换行符,我不能在评论中包含它。 –