我正在使用这个:
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
#!/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'
但是结果相同。
当你使用一个命令替换(即$(…)构造),你正在创建一个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