Как добавить разрыв строки для команды чтения?

 read -p "Please Enter a Message:" message

Как добавить разрыв строки после Message:?

Ответ 1

Мне нравится Хуан Ф. Лей ответить, но если вам не нравится литеральный разрыв строки, это работает:

read -p "Please Enter a Message: `echo $'\n> '`" message

Показывает:

Please Enter a Message:
> _

... где _ находится курсор. Обратите внимание, что поскольку завершающие символы новой строки обычно удаляются при подстановке команд, я включил > после этого. Но на самом деле ваш исходный вопрос, похоже, не хочет этого быстрого бита, поэтому:

# Get a carriage return into `cr` -- there *has* to be a better way to do this
cr=`echo $'\n.'`
cr=${cr%.}

# Use it
read -p "Please Enter a Message: $cr" message

Отображение

Please Enter a Message:
_

Однако должен быть лучший способ.

Ответ 2

Просто ищите то же самое. Вы можете использовать:

# -r and -e options are unrelated to the answer.
read -rep $'Please Enter a Message:\n' message

И он будет работать точно так же, как и задано:

Please enter a Message:
_

Вот выдержка из справочной страницы bash, объясняющая это:

Слова формы $'string' обрабатываются специально. Слово расширяется до строка с замененными символами с обратной косой чертой, как указано в Стандарт ANSI C. Последующие последовательности обратной косой черты, если они имеются, декодируются следующим образом:

  • (...)
  • \n новая строка
  • (...)

Расширенный результат одинарный, как если бы знак доллара не был присутствовали.

Пришло время узнать.

Обратите внимание, что одинарные кавычки и двойные кавычки ведут себя по-разному в этом отношении:

Строка с двойными кавычками, перед которой стоит знак доллара ($), приведет к строка, которая будет переведена в соответствии с текущей локалью. Если cur- арендной платой является C или POSIX, знак доллара игнорируется. Если строка переводится и заменяется, замена выполняется двойным образом.

Ответ 3

$ read -p "Please Enter a Message:
> " message
Please Enter a Message:

Ввод "новой строки" между ":" и "" напрямую.

Ответ 4

Просто чтобы улучшить ответы Хуан Ф. Лей и T.J. Crowder, который мне нравится (и добавил +1).. Вы также можете использовать один из следующих синтаксисов: они в основном одинаковы, это зависит от вашего вкуса (я предпочитаю первый):

read -p "$(echo -e 'Please Enter a Message: \n\b')" message
read -p "`echo -e 'Please Enter a Message: \n\b'`" message

которые оба будут производить следующий вывод:

Please Enter a Message: 
_

где _ - курсор.
Если вам нужна новая строка в любой части строки, но в конце, вы можете использовать \n, например

read -p "`echo -e '\nPlease Enter\na Message: '`" message

создаст

.
Please Enter
a Message: _

где. это пустая первая новая строка, а _ - курсор.

Только для добавления конечной конечной новой строки вы должны использовать \n\b, как в моем первом примере

Ответ 5

Из bash manpage:

-p prompt
   Display prompt on standard error, without a trailing new-
   line, before attempting to read any input.  The prompt is
   displayed only if input is coming from a terminal.

Итак, не с самим read, и помещая \n в строку сообщения только эхо-сигналы \n. Ответ должен быть простым, но - не получите read для отображения приглашения:

echo "Please Enter a Message:" 1>&2
read message

Ответ 6

Здесь улучшается принятый ответ, который не требует нереста подоболочки:

read -p "Please Enter a Message:"$'\n' message

В справочном руководстве GNU Bash:

Обрабатываются слова вида $'string'. Слово расширяется до строки с заменой символов с обратным слэшем, как это определено стандартом ANSI C.

Ответ 7

read -p "Please Enter a Message: Return " message