我试图将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
运行测试脚本:。test.sh
result:
postgres:latest
not equals
现在用命令行设置环境变量:
export DB1_IMAGE="postgres:latest"
现在再次运行测试脚本:。test.sh
result:
postgres:latest
equals
摘要:当使用bash脚本设置环境变量时,该值将在另一个bash脚本中的equals比较中失败。当使用命令行设置相同的环境变量时,它将通过equals测试。我无法解释为什么会这样。我觉得我错过了一些显而易见的东西。==测试怎么会失败?是否以某种方式插入了无法打印的字符?请帮忙。。
感谢@glennjackman,原因是bash脚本文件(setenv.env(是DOS格式的,而不是UNIX格式的。这意味着它有换行符,\r\n这会导致将隐藏字符插入到环境变量中。修复方法是在文件(sudo apt-install dos2unix(上运行dos2unix