コマンドラインからユーザー入力を取得できることがわかりました。ところで、私が入力した改行文字を認識しません。行為:
#!/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
またはmulti\nline
?
関連質問:
ベストアンサー1
入力\n
(たとえば、2文字\
の合計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'
~からバッシュマニュアル:
バックスラッシュ文字「\」を使用すると、次の文字の読み取りと行の連続の特別な意味を削除できます。
「行連続」ビットは、行区切り文字で他の文字を使用しない限り、改行をエスケープできないことを意味するようです。