': недопустимый идентификатор для чтения

': недопустимый идентификатор для чтения

Я использую Notepad++ и набираю:

    read s
    echo "$s"

Выходные данные:

<code>': недопустимый идентификатор</code>

И затем я пытаюсь поставить точку с запятой:

read s;
echo "$s"

и выход:

введите описание изображения здесь

Я сохраняю файл как q.shи запускаю с помощью cygwin, но я все еще не могу использовать readоператор, поэтому я запутался. Я пробовал другие редакторы, viно вывод тот же.

Что не так? Как заставить это работать?

решение1

Текстовый файл, который составляет скрипт оболочки, был написан в Notepad++. Этот редактор сохраняет файлы как текстовые файлы DOS по умолчанию, которые, с точки зрения Unix, имеют лишний возврат каретки ( \r) в конце каждой строки. Это сбивает с толку sh.

Чтобы удалить его:

$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh

Сценарийделаетотсутствует #!-строка (как указано в комментариях), но если вы запускаете его с явным интерпретатором ( sh q.sh), это не нужно.

Добавление строки

#!/bin/sh

(после chmod +x q.sh) запуск его в качестве будет ./q.shвести себя точно так же, как запуск его с sh q.sh.

решение2

Другой способ преобразовать возврат каретки для Unix, если у вас есть доступ к Notepad++. В Notepad, перейдите: Правка -> Конвертация EOL -> Unix (LF)

На французском это: Edition -> Convertir les sauts de ligne -> Converti au format Unix (LF)

Это может быть быстрее.

Связанный контент