Bash unix中函数中变量的作用域

Bash unix中函数中变量的作用域,bash,unix,Bash,Unix,我在Ubuntu Shell中工作,但我希望它也能在UNIX中工作。 这是我的密码: #!/bin/bash func() { x=42 } x=9 func echo $x 当我只更改了局部变量时,为什么全局x更改为42 在unix中,变量作用域的规则是否不同 是否有一种方法可以将func的返回值设置为全局变量,以便以后在代码中使用 谢谢大家! 首先,您没有编写Linux;实际上,您正在为shell程序编写一个名为bash的函数。在命令行中输入info bash,获取相关文档

我在Ubuntu Shell中工作,但我希望它也能在UNIX中工作。
这是我的密码:

#!/bin/bash

func()
{
    x=42
}

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

谢谢大家!

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


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

谢谢!关于这个返回值,有什么方法吗?类似于
var=$(有趣)
的东西有点奇怪。您可以打印结果,然后将结果捕获到变量中:
$func(){local x;x=“fred”;echo$x;};$威尔玛=$(func);$echo$wilma
打印“fred”,或者,您可以返回一个整数作为错误代码:
$func(){return 42};func;误差=$?;echo$ERR
将打印42。(注意返回语句和“}”之间必须有一个换行符,我不能将其包含在评论中。感谢您的回答:)它有助于本地/声明是调查的选项。手册中可以找到最基本的bash问题的答案:可能重复、、等。