![使用 Bash Windows 子系统进行错误的字符串连接](https://linux22.com/image/1577084/%E4%BD%BF%E7%94%A8%20Bash%20Windows%20%E5%AD%90%E7%B3%BB%E7%BB%9F%E8%BF%9B%E8%A1%8C%E9%94%99%E8%AF%AF%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BF%9E%E6%8E%A5.png)
我很头疼为什么我的脚本在 Windows 子系统 Linux 下不能按预期工作。
我在商店购买的版本:(Debian GNU/Linux 9.6 (stretch)
我也尝试过 ubuntu,结果相同)
我的 bash 版本是:GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
这是我的基本脚本,仅用于显示问题:
PROJECT_ENV="development"
echo $PROJECT_ENV
compose_file="docker-compose.${PROJECT_ENV}.build.yml"
echo $compose_file
并且它输出:
.build.ymlpose.development
据我了解,该输出对我来说没有任何意义,我尝试重新安装 bash,但仍然遇到同样的问题。
答案1
变量内容末尾有回车符PROJECT_ENV
。这可能是因为您的脚本使用了CR+LF
行尾(适用于 DOS/Windows)而不是 sole LF
(Unix/Linux)。
在 Linux 中,dos2unix
有正确的工具可以修复它。
详细解释如下:
最终
echo
印刷品docker-compose.development
CR
使终端回到行首。连续的字符会覆盖先前的文本:
.build.yml
因此结果是:
.build.ymlpose.development