Bash
如何從命令行讀取帶有換行符的輸入行?
我發現這是從命令行獲取使用者輸入的。但它無法辨識我輸入輸入的換行符。正在做:
#!/bin/bash read -e -p "Multiline input=" variable; printf "'variable=%s'" "${variable}";
- 輸入使輸出
'multi\nline'
_Multiline input=``printf``'variable=multinline'
- 輸入使輸出
'multi\\nline'
_Multiline input=``printf``'variable=multi\nline'
如何
printf
列印我讀取的新行read -p
,即輸出
multi line
而不是
multinline
ormulti\nline
?相關問題:
如果輸入
\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 手冊:
反斜杠字元“\”可用於刪除下一個字元讀取和行繼續的任何特殊含義。
“續行”位似乎暗示您無法轉義換行符,除非您使用不同的字元作為行分隔符。