如何修改bash中的函数内的全局变量?
发布时间:2020-12-15 16:13:03 所属栏目:安全 来源:网络整理
导读:我正在使用这个: GNU bash,version 4.1.2(1)-release (x86_64-redhat-linux-gnu) 我有一个脚本如下: #!/bin/bashe=2function test1() { e=4 echo "hello"}test1 echo "$e" 其中返回: hello4 但是如果我将函数的结果赋给一个变量,则不会修改全局变量e: #
我正在使用这个:
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函数的回调并修改全局变量?
当你使用一个命令替换(即$(…)构造),你正在创建一个subshel??l。 Subshel??l从其父shell继承变量,但这只能工作一种方式 – subshel??l不能修改其父shell的环境。您的变量e设置在subshel??l内,但不是父shell。有两种方法可以将值从subshel??l传递给其父级。首先,你可以输出一些东西到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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |