Неправильная конкатенация строк в подсистеме Bash Windows
У меня головная боль, чтобы понять, почему мой сценарий не работает должным образом в Linux-подсистеме Linux.
Моя версия из магазина: Debian GNU/Linux 9.6 (stretch) (Я тоже пробовал убунту, с теми же результатами)
И моя версия 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) вместо единственного LF (Unix/Linux).
В линуксе dos2unix это правильный инструмент, чтобы исправить это.
Подробное объяснение заключается в следующем:
Финал
echoпечатьdocker-compose.developmentCRзаставляет терминал возвращаться к началу строки.Последовательные символы перезаписывают предыдущий текст:
.build.ymlСледовательно, результат:
.build.ymlpose.development