如何在一系列命令中共享shell脚本中的变量?

时间:2016-05-30 19:31:23

标签: shell

假设我有很多脚本:1.sh,2.sh 3.sh,...,n.sh,我想以这种方式使用它们:

./1.sh | 2.sh | 3.sh | ... | n.sh

我想将1.sh中的变量分享给其他人。

我试图导出变量。问题是:我不希望它们在最后一次完成后存在。让n.sh擦除它们会很容易,但这对我来说听起来很麻烦。

Stack Overflow上的解决方案有很多答案,但它们都不适合我。

总而言之,我问是否有一种方法可以构造仅适用于带有管道的一系列命令的变量。

有没有办法在没有解决方法的情况下这样做?

2 个答案:

答案 0 :(得分:1)

尝试一下:

( MYVAR=42; export MYVAR ; ./1.sh | 2.sh | 3.sh | ... | n.sh )

shell创建了第一个子shell来执行( ... )

中的脚本

MYVAR仅在子shell中定义,并且对所有脚本都可见。它的寿命与第一个子shell相同。

在执行其中一个MYVAR ... 1.sh脚本期间,n.sh的任何更改都不会在外部显示:换句话说,如果1.sh修改{的值{1}},然后MYVAR和其他脚本只看到oringinal值(示例中为42)。

答案 1 :(得分:0)

将所有内容放入https://regex101.com/r/bJ9hJ9/2 个括号中,并在开始( ./1.sh | 2.sh | 3.sh | ... | n.sh ) - ()是子shell后设置所有变量,因此在结束后,不会留下任何环境 - 不需要"除去"任何东西。