首页 > 解决方案 > 传递给 bash 脚本的环境变量在函数内部为空

问题描述

我有 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 等于“YES”。

标签: linuxbashenvironment-variables

解决方案


您只是设置运行MY_VARIABLE的环境source。完成后,my_func在您的原始环境中运行。如果您想my_func访问,请使用

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

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


推荐阅读