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

Para hasta CentOS 7 Puede probar

cat /proc/meminfo 

para ver el uso real de la memoria por parte de los procesos.

0
27.06.2019, 09:00
3 ответа

Если ввод\n(как двух символов \иn)приемлем, вы можете использовать printfдля интерпретации:

#!/bin/bash
IFS= read -rep "Multiline input=" variable;
printf -v variable "%b" "$variable"
printf "'variable=%s'\n" "${variable}";

Например:

~./foo.sh
Multiline input=foo\nbar
'variable=foo
bar'

Из руководства bash:

The backslash character ‘\’ may be used to remove any special meaning for the next character read and for line continuation.

Бит «продолжение строки», по-видимому, подразумевает, что вы не можете избежать новой строки, если не используете другой символ в качестве разделителя строки.

4
28.01.2020, 02:22

У @muru есть правильный ответ на bash.

В качестве альтернативы :пусть printfобрабатывает последовательности обратной косой черты, но вы должны быть осторожны с %символами во входных данных

read -r input
printf "${input//%/%%}\n"
1
28.01.2020, 02:22

Вместо того, чтобы использовать какую-то особенность bashили printf, я использовал sedдля замены экранированного символа новой строки \\nфактической новой строкой:

#!/bin/bash
read -e -p -r "Multiline input=" variable;
printf "'variable=%s'" "${variable}";
variable=$(printf "${variable}" | sed 's/\\n/\n/g');

Ссылки:

  1. https://stackoverflow.com/questions/52065016/how-to-replace-n-string-with-a-new-line-in-unix-bash-script
  2. https://stackoverflow.com/questions/1251999/how-can-i-replace-a-newline-n-using-sed
  3. https://stackoverflow.com/questions/10748453/replace-comma-with-newline-in-sed-on-macos
  4. Может ли sed заменить символы новой строки?
-1
28.01.2020, 02:22

Теги

Похожие вопросы