【问题标题】:Setting variables with spaces within .env在 .env 中设置带空格的变量
【发布时间】:2015-06-07 23:44:43
【问题描述】:

我有一个带有一堆变量的 .env 文件,但我遇到了一个错误。

其中一个变量有空格。

TEST="hello world"

所以当我运行这个时,learned about in this answer here.

env $(<.env)

我收到此错误。

env: world"': No such file or directory

如何在 .env 中设置带空格的变量?

【问题讨论】:

  • 你只需要引用文件内容:env "$(&lt;.env)"
  • @glennjackman env "$(&lt;.env)" echo $TEST 似乎打印了一个空行。
  • @glennjackman, @ThomasReggi:这不能与 echo 示例一起使用,因为 $TEST 的替换是在没有设置 TEST 变量的当前 shell 中运行 echo 之前完成的。当echo 运行时,TEST 被设置,但echo 不知道如何处理$TEST
  • 它应该适用于外部命令,并且在这种情况下可能比我的解决方案更可行。

标签: bash environment-variables env


【解决方案1】:

把包含空格的单词放在“”之间。

【讨论】:

    【解决方案2】:

    如果你的命令只是一个 shell 命令,你可以像这样在子 shell 中运行你的命令:

    ( . .env ; echo "$TEST" )
    

    source. 内置函数对包含空格的赋值没有问题。它将在当前 shell 的环境中设置.env 文件中的变量。

    在更可能调用外部程序的情况下,您还必须将“导出”添加到 env 文件中的每个分配中,如下所示:

    export TEST="hello world"
    

    这是必要的,因为source 不会像env 那样导出分配的变量,即它们仅设置在子shell 内,而不是在该子shell 内启动的另一个进程的环境中。

    【讨论】:

    • 我没有test.env 文件,我不明白那是什么。假设我的cmd 只是到echo $TEST 所以从你的例子中( . .env ; echo $TEST ) 不起作用它给了我-bash: world: command not found
    • 啊,抱歉,我以为.env 只是扩展名。我会修改的。
    • “源代码或 .builtin 对包含空格的赋值没有问题”不正确。未加引号的空格会导致 bash 认为空格后面的单词是命令,这就是 OP 得到“找不到命令”的原因。 = 后面的值如果包含空格,需要用引号引起来。
    • 感谢您的反馈。让我分享一下我的想法:(1)引用了 OP 示例中的空格 is ,因此我的陈述在这种情况下是正确的。 (2) 正如我在问题 cmets 中所指出的,在大多数情况下,仅引用命令替换可能就足够了,但它不适用于 glennjackman 提供的示例。 (3)这里的实际问题是命令替换中从.env读取的引号没有被Bash解释,然后出现分词,env将第二个参数world"解释为命令(env NAME=value COMMAND ARG ...) .
    猜你喜欢
    • 2019-07-12
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2015-05-19
    • 2014-07-15
    相关资源
    最近更新 更多