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

wak*_*n22 2 linux bash string concatenation windows-subsystem-for-linux

我很想知道为什么我的脚本在 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
Run Code Online (Sandbox Code Playgroud)

它输出:

.build.ymlpose.development
Run Code Online (Sandbox Code Playgroud)

据我了解,该输出对我来说没有任何意义,我尝试重新安装 bash 但我仍然遇到同样的问题。

Kam*_*ski 8

PROJECT_ENV变量内容末尾有一个回车符。这可能是因为您的脚本使用CR+LF 行结尾(在 DOS/Windows 中是正确的)而不是唯一的LF(Unix/Linux)。

在 Linux 中dos2unix是修复它的正确工具。

详细解释如下:

  1. 最后的echo印刷品

    docker-compose.development
    
    Run Code Online (Sandbox Code Playgroud)
  2. CR 使终端回到行首。

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

    .build.yml
    
    Run Code Online (Sandbox Code Playgroud)
  4. 因此结果是:

    .build.ymlpose.development
    
    Run Code Online (Sandbox Code Playgroud)