传递给bash脚本的环境变量在函数内部为空

时间:2019-11-22 14:26:23

标签: linux bash environment-variables

我有bash脚本:myscript.sh。这是内容:

#!/bin/bash

function my_func {
    echo "my_func start"
    echo $MY_VARIABLE  # THIS PRINTS NOTHING
    echo "my_func end"
}

function func2 {
}

echo "after my_func"
echo $MY_VARIABLE # this prints "YES"

我只想从命令行使用环境变量“ MY_VARIABLE”调用函数my_func。我使用以下命令启动脚本:

MY_VARIABLE=YES source myscript.sh; my_func

以下是输出:

after my_func
YES
my_func start

my_func end

my_func()中的变量$ MY_VARIABLE为空。我希望my_func()中的变量$ MY_VARIABLE等于“是”。

1 个答案:

答案 0 :(得分:3)

您仅为运行MY_VARIABLE的环境设置source。完成后,my_func将在您的原始环境中运行。如果您希望my_func可以访问,请使用

export MY_VARIALBE=YES; source my script.sh; my_func

bash没有闭包;当您定义my_func时,shell在定义中未使用MY_VARIABLE的当前值。它只是创建一个函数,该函数在被调用时会在调用范围内查找该值。