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

前端之家收集整理的这篇文章主要介绍了如何修改bash中的函数内的全局变量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用这个:
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

猜你在找的Bash相关文章