読み取りを使用して入力を読み取るときに2つの改行を区切り文字として使用する方法

読み取りを使用して入力を読み取るときに2つの改行を区切り文字として使用する方法

次のコマンド:

$ 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つの改行文字を見つけるのではなく、空の入力行を見つけるだけです。これが初めてかもしれません。

おすすめ記事