UNIX традиционно не очень простителен для ввода в программы. Это отношение не сильно изменилось с момента его первого появления. ^M
- возврат каретки, который обычно попадает в файлы только при редактировании их в средах Windows. UNIX использует перевод строки (\ n, 0x0a) в качестве ограничителя строки, и многие инструменты жалуются на CR (\ r, 0x0d), так как не видят причины, по которой этот символ должен существовать.
$
- это другая проблема, поскольку $
является частью синтаксиса make-файла. Он используется для указания переменных / констант в make-файлах. Это могут быть контекстные, например $<
или $*
, или именованные, например $(CC)
.
Вы можете использовать утилиту dos2unix
, чтобы избавиться от ^M
и экранировать знаки доллара с помощью \$
.
Тем не менее, есть и другие особенности. Например, требование, чтобы командные строки для целей должны иметь отступ с помощью символа табуляции. Насколько мне известно, только make
не очень широко используются, сняли это ограничение.