加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何修改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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读