使用 read 读取输入时如何使用两个换行符作为分隔符

使用 read 读取输入时如何使用两个换行符作为分隔符

以下命令:

$ read input
hello \
> world
$ echo "$input"

允许我使用反斜杠字符输入多行输入。

我现在正在寻求更改此设置以允许不带反斜杠的多行输入。我尝试使用该-d选项如下:

$ read -d '\n\n' input

但这并没有按预期工作。

> hello
world


每次我按下回车键,它就会继续下去。

bash 中的换行符是\n,所以我希望输入在找到两个换行符后停止。

我该如何解决这个问题?

答案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"

严格来说,这并不查找两个换行符,而只是查找一个空输入行。这可能是第一个。

相关内容