次のコマンド:
$ read input
hello \
> world
$ echo "$input"
バックスラッシュ文字を使用して複数行の入力を入力できます。
さて、バックスラッシュなしで複数行の入力を許可するように変更しようとしています。この-d
オプションを次のように試しました。
$ read -d '\n\n' input
しかし、これは期待どおりに機能しませんでした。
> hello
world
Enterを押すたびに続きます。
Bashの改行文字な\n
ので、2つの改行文字が見つかったら入力を停止したいと思います。
この問題をどのように解決できますか?
答え1
コメントで述べたように、直接使用することはできないようですread
。したがって、手動で実行してください。
#!/bin/bash
# the function writes to global variable 'input'
getinput() {
input=
local line
# read and append to 'input' until we get an empty line
while IFS= read -r line; do
if [[ -z "$line" ]]; then break; fi
input+="$line"$'\n'
done
}
printf "Please enter input, end with an empty line:\n"
getinput
printf "got %d characters:\n>>>\n%s<<<\n" "${#input}" "$input"
厳密に言えば、これは2つの改行文字を見つけるのではなく、空の入力行を見つけるだけです。これが初めてかもしれません。