읽기를 사용하여 입력을 읽을 때 두 줄 바꿈을 구분 기호로 사용하는 방법

읽기를 사용하여 입력을 읽을 때 두 줄 바꿈을 구분 기호로 사용하는 방법

다음 명령:

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

백슬래시 문자를 사용하여 여러 줄 입력을 입력할 수 있습니다.

이제 백슬래시 없이 여러 줄 입력을 허용하도록 이를 변경하려고 합니다. 이 -d옵션을 다음과 같이 사용해 보았습니다 .

$ read -d '\n\n' input

그러나 이는 예상대로 작동하지 않았습니다.

> hello
world


Enter를 누를 때마다 계속됩니다.

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"

엄밀히 말하면 이것은 두 개의 개행 문자를 찾는 것이 아니라 단지 빈 입력 줄을 찾는 것입니다. 이것이 처음일 수도 있습니다.

관련 정보