递增环境变量

时间:2014-04-28 05:13:42

标签: linux bash shell sh

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

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保留。

为你的时间感恩。

2 个答案:

答案 0 :(得分:4)

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

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

#!/bin/bash

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

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

export HELLo=1

如果我像这样运行脚本,它会在自己的shell中运行,不会影响父级。

./Foo.sh

但是,如果我采购它,它只会执行当前 shell中的命令,并将达到预期的效果。

. Foo.sh
echo $HELLO # prints 2

答案 1 :(得分:0)

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

因此,如果您export foo=bar,然后使用您的脚本调用sh(新流程),则脚本会看到$foo的值("bar" ),它将能够更改自己的副本 - 但这不会影响父进程的环境(导出变量的地方)。

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

source increment_script.sh

. increment_script.sh

然后会改变变量的值。

这是因为source脚本可以避免产生新的shell(进程)。

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

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

然后将其作为

运行
eval `increment_script.sh`