gpt4 book ai didi

bash - 如何修改 bash 函数中的全局变量?

转载 作者:行者123 更新时间:2023-11-29 08:39:15 24 4
gpt4 key购买 nike

我正在处理这个:

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'

但是结果一样。

你能解释一下为什么它没有被修改吗?如何将 test1 函数的回显保存在 ret 中并修改全局变量?

最佳答案

当您使用命令替换(即 $(...) 构造)时,您正在创建一个子 shell。子 shell 从它们的父 shell 继承变量,但这只适用于一种方式:子 shell 不能修改其父 shell 的环境。

您的变量 e 是在子 shell 中设置的,而不是在父 shell 中设置的。有两种方法可以将值从子 shell 传递到其父 shell。首先,您可以将某些内容输出到标准输出,然后使用命令替换捕获它:

myfunc() {
echo "Hello"
}

var="$(myfunc)"

echo "$var"

以上输出:

Hello

对于 0 到 255 范围内的数值,您可以使用 return 将数字作为退出状态传递:

mysecondfunc() {
echo "Hello"
return 4
}

var="$(mysecondfunc)"
num_var=$?

echo "$var - num is $num_var"

这个输出:

Hello - num is 4

关于bash - 如何修改 bash 函数中的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com