Falsche String-Verkettung mit Bash Windows Subsystem

2

Ich habe Kopfschmerzen zu wissen, warum mein Skript unter Windows Subsystem Linux nicht wie erwartet funktioniert.

Meine Version aus dem Laden: Debian GNU/Linux 9.6 (stretch)(Ich habe Ubuntu auch ausprobiert, mit den gleichen Ergebnissen)

Und meine Bash-Version: GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)

Dies ist mein Basisskript, um nur das Problem zu zeigen:

PROJECT_ENV="development"
echo $PROJECT_ENV
compose_file="docker-compose.${PROJECT_ENV}.build.yml"
echo $compose_file

Und es gibt aus:

.build.ymlpose.development

Soweit ich weiß, ergibt diese Ausgabe für mich keinen Sinn. Ich habe versucht, Bash neu zu installieren, aber ich habe immer noch das gleiche Problem.

waken22
quelle

Antworten:

7

Am Ende des PROJECT_ENVvariablen Inhalts befindet sich ein Wagenrücklaufzeichen . Dies liegt wahrscheinlich daran, dass Ihr Skript CR+LF Zeilenenden (ordnungsgemäß unter DOS / Windows) anstelle von sole LF(Unix / Linux) verwendet.

In Linux dos2unixist das richtige Tool, um es zu beheben.

Die detaillierte Erklärung lautet wie folgt:

  1. Die endgültigen echoDrucke

    docker-compose.development
  2. CR Lässt das Terminal zum Zeilenanfang zurückkehren.

  3. Die aufeinander folgenden Zeichen überschreiben den vorherigen Text:

    .build.yml
  4. Daher ist das Ergebnis:

    .build.ymlpose.development
Kamil Maciorowski
quelle