繁体   English   中英

增加环境变量

[英]incrementing an environmental variable

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

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。

谢谢你的时间。

shell 脚本在它自己的 shell 中执行,因此除非您提供它,否则您无法影响外壳程序。 有关该讨论的详细信息,请参阅此问题

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

#!/bin/bash

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

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

export HELLO=1

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

./Foo.sh

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

. Foo.sh
echo $HELLO # prints 2

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

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

你可以简单地source脚本在原来的外壳,即运行

source increment_script.sh

或者

. increment_script.sh

然后会改变变量的值。

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

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

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

然后运行它

eval `increment_script.sh`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM