使用 Bash Windows 子系统进行错误的字符串连接

使用 Bash Windows 子系统进行错误的字符串连接

我很头疼为什么我的脚本在 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有正确的工具可以修复它。

详细解释如下:

  1. 最终echo印刷品

    docker-compose.development
    
  2. CR使终端回到行首。

  3. 连续的字符会覆盖先前的文本:

    .build.yml
    
  4. 因此结果是:

    .build.ymlpose.development
    

相关内容