增加环境变量

问题描述 投票:2回答:2

我需要通过以下步骤增加环境变量:

envar=1
export envar
sh script_incrementation
echo $envar

其中script_incrementation包含以下内容:

#! /bin/sh
envar=$[envar+1] #I've tried also other methods of incrementation
export envar

无论如何,退出脚本后,变量将保持其初始值1。

感谢您的宝贵时间。

linux bash shell sh
2个回答
8
投票

shell脚本在其自己的shell中执行,因此,除非您提供外壳脚本,否则不会影响外壳。有关该讨论的详细信息,请参见this question

考虑以下脚本,我将其称为Foo.sh

#!/bin/bash

export HELLO=$(($HELLO+1))

假设在外壳中,我定义了一个环境变量:

export HELLO=1

如果我像这样运行脚本,它将在自己的外壳中运行,并且不会影响父脚本。

./Foo.sh

但是,如果我提供它,它将只执行current shell中的命令,并会实现所需的效果。

. Foo.sh
echo $HELLO # prints 2

0
投票

您的脚本不能更改调用进程(shell)的环境,它只是继承它。

因此,如果您export foo=bar,然后使用脚本调用sh(一个新进程),该脚本将看到$foo(即"bar")的值,并且可以更改它自己的副本–但这不会影响父进程的环境(在该环境中导出变量)。

您可以简单地source在原始shell中运行脚本,即运行

source increment_script.sh

. increment_script.sh

然后将更改变量的值。

因为这是因为source编写脚本可避免产生新的Shell(进程)。

另一个技巧是让脚本输出更改后的环境,然后评估该输出,例如:

counter=$[counter+1]
echo "counter=$counter"

然后运行为

eval `increment_script.sh`
© www.soinside.com 2019 - 2024. All rights reserved.