Как добавить разрыв строки для команды чтения?
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