Bash 脚本未正确设置环境变量

时间:2021-06-13 20:29:48

标签: bash shell command-line environment-variables

我试图在一个 bash 脚本中设置环境变量以供另一个 bash 脚本读取,但它们没有正确设置。我使用的是 Ubuntu 20.04。

在脚本中设置环境变量:

setenv.env
  export DB1_IMAGE="postgres:latest"

运行它:。 setenv.env

test it:  echo $DB1_IMAGE
result: postgres:latest

测试环境变量值的脚本:

test.sh
#!/bin/bash
echo $DB1_IMAGE
if [[ $DB1_IMAGE ==  "postgres:latest" ]]
then
  echo "equals"
else
  echo "not equals"
fi

运行测试脚本:。测试.sh

result:  
     postgres:latest
     not equals

现在用命令行设置环境变量:

export DB1_IMAGE="postgres:latest"

现在再次运行测试脚本:。测试.sh

result:  
     postgres:latest
     equals

总结:当使用 bash 脚本设置环境变量时,该值将无法在另一个 bash 脚本中进行等于比较。当使用命令行设置相同的环境变量时,它会通过 equals 测试。我无法解释这是为什么。我觉得我错过了一些明显的东西。 == 测试怎么会失败?是否以某种方式插入了不可打印的字符?请帮忙..

1 个答案:

答案 0 :(得分:0)

感谢@glennjackman,这是因为 bash 脚本文件 (setenv.env) 是 DOS 格式而不是 UNIX 格式。这意味着它有 \r\n 换行符,这会导致将隐藏字符插入到环境变量中。修复方法是在文件上运行 dos2unix (sudo apt install dos2unix)