Неправильная конкатенация строк в подсистеме 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.development
CR
заставляет терминал возвращаться к началу строки.Последовательные символы перезаписывают предыдущий текст:
.build.yml
Следовательно, результат:
.build.ymlpose.development