我正在使用这个:
GNU bash,version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
我有一个脚本如下:
#!/bin/bash e=2 function test1() { e=4 echo "hello" } test1 echo "$e"
其中返回:
hello 4
但是如果我将函数的结果赋给一个变量,则不会修改全局变量e:
#!/bin/bash e=2 function test1() { e=4 echo "hello" } ret=$(test1) echo "$ret" echo "$e"
返回:
hello 2
我听说过the use of eval在这种情况下,所以我这样做在test1:
eval 'e=4'
但是结果相同。
你能解释我为什么它没有修改?如何在ret中保存test1函数的回调并修改全局变量?
当你使用一个命令替换(即$(…)构造),你正在创建一个subshell。 Subshell从其父shell继承变量,但这只能工作一种方式 – subshell不能修改其父shell的环境。您的变量e设置在subshell内,但不是父shell。有两种方法可以将值从subshell传递给其父级。首先,你可以输出一些东西到stdout,然后用命令替换捕获它:
myfunc() { echo "Hello" } var="$(myfunc)" echo "$var"
给予:
Hello
对于从0-255的数值,可以使用return将该数作为退出状态:
myotherfunc() { echo "Hello" return 4 } var="$(myotherfunc)" num_var=$? echo "$var - num is $num_var"
给予:
Hello - num is 4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。