Bash

如何從命令行讀取帶有換行符的輸入行?

  • June 30, 2019

我發現這是從命令行獲取使用者輸入的。但它無法辨識我輸入輸入的換行符。正在做:

#!/bin/bash
read -e -p "Multiline input=" variable;
printf "'variable=%s'" "${variable}";
  1. 輸入使輸出'multi\nline'_Multiline input=``printf``'variable=multinline'
  2. 輸入使輸出'multi\\nline'_Multiline input=``printf``'variable=multi\nline'

如何printf列印我讀取的新行read -p,即輸出

multi line

而不是multinlineor multi\nline

相關問題:

  1. 讀取命令中的 -p 選項有什麼作用?
  2. bash:閱讀:如何擷取 ‘\n’ (換行符)字元?
  3. 外殼:讀取:區分 EOF 和換行符
  4. https://stackoverflow.com/questions/4296108/how-do-i-add-a-line-break-for-read-command
  5. 讀取由換行符分隔的參數
  6. https://stackoverflow.com/questions/43190306/how-to-add-new-line-after-user-input-in-shell-scripting

如果輸入\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 手冊

反斜杠字元“\”可用於刪除下一個字元讀取和行繼續的任何特殊含義。

“續行”位似乎暗示您無法轉義換行符,除非您使用不同的字元作為行分隔符。

引用自:https://unix.stackexchange.com/questions/527170