【问题标题】:Value of global variable doesn't change in BASHBASH 中全局变量的值不变
【发布时间】:2009-07-31 16:08:24
【问题描述】:

我正在编写一个具有全局变量的 BASH 脚本。变量的值在函数/子例程中发生变化。但是当我尝试在函数之外打印该变量时,该值不会改变。 示例代码如下:

#!/bin/bash

count=

linux_f()
    {
        let count=100
    }

linux_f

echo $count

echo 语句打印空白而不是 100 为什么全局变量的值在函数中没有遍历出来。

【问题讨论】:

  • 这是你脚本中的错字吗?您正在设置一个变量 countl,但您正在尝试获取 count 的值。
  • @dreamlax。是的。抱歉错字。现已更正。
  • 修正错字后代码可以工作

标签: linux bash scripting


【解决方案1】:

您的代码对我有用,打印 100。这是我使用的代码:

count=

linux_f()
    {
        let count=100
    }

linux_f

echo $count

编辑:我已经在 MSYS 上的 bash 版本 2 和 Fedora Linux 上的版本 3 上尝试过这个,并且它适用于两者。你真的确定你正在执行那个脚本吗?尝试在其中放置一个 echo “this is it”,以确保显示某些内容。除此之外,我很茫然。

【讨论】:

  • 再次尝试了同样的事情。不为我工作。你能告诉我什么可能是错的。为了澄清起见,我将代码放在 x.sh 文件中,然后使用 ./x.sh 运行。
  • 只是添加内核版本是2.6.9-67.0.20.ELsmp和bash版本是3
  • 在 RedHat AS3 内核 2.6.9-67.0.15.ELsmp、Bash 3.00.15 上为我工作。尝试将 echo 语句复制到函数中,然后设置变量并查看它是否输出正确的值。
【解决方案2】:

可能是因为您分配给countl 而不是count?

【讨论】:

  • @Manni。抱歉打错了。它是相同的变量
【解决方案3】:

该变量赋值(函数内部)存在拼写错误。一旦修复它就会工作:

[dsm@localhost:~]$ var=3
[dsm@localhost:~]$ echo $var
3
[dsm@localhost:~]$ function xxx(){ let var=4 ; }
[dsm@localhost:~]$ xxx
[dsm@localhost:~]$ echo $var
4
[dsm@localhost:~]$ 

并作为脚本运行:

[dsm@localhost:~]$ cat test.sh 
#!/bin/bash

var=
echo "var is '$var'"
function xxx(){ let var=4 ; }
xxx
echo "var is now '$var'"
[dsm@localhost:~]$ ./test.sh #/ <-- #this is to stop the highlighter thinking we have a regexp
var is ''
var is now '4'
[dsm@localhost:~]$ 

【讨论】:

  • 我已将代码放入脚本中。你可以在脚本中尝试。根据我对脚本和提示的理解,由于 shell 和 subshel​​l 概念,行为可能会有所不同。
  • @dsm。你能告诉我你使用的是什么版本的 bash 和 linux。我确信这对我不起作用。我有内核版本 2.6.9-67.0.20.ELsmp 和 bash 版本是 3。
  • @Viky:没关系......即使是最迟钝的外壳也会按预期工作。告诉我一件事,您是否希望看到您的脚本已运行的变量集 AFTER?
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多