"읽기"가 모든 변수를 가져오지 못하는 이유는 무엇입니까?

"읽기"가 모든 변수를 가져오지 못하는 이유는 무엇입니까?

다음은 왜 3 2 1 6 5 4를 인쇄하지 않습니까?

echo '1 2 3 4 5 6' | while read a b c; do echo result: $c b a; done

처음 세 숫자를 순서대로 읽고 역순으로 인쇄한 다음, 마지막 세 숫자를 읽고 역순으로 인쇄하는 것이 더 좋지 않을까요?

답변1

6개의 "단어"가 포함된 줄을 제공하고 이를 세 개의 변수(a, b, c)로 읽습니다. 첫 번째 변수 a에는 값 1이 할당되고, 두 번째 변수 b에는 값 2가 할당되며, c에는 "3 4 5 6" 줄의 나머지 부분이 포함됩니다.

출력은 3 4 5 6 b a당신이 글을 쓰지 않고 $c $b $a글만 썼기 때문입니다 $c b a.

라고 쓰면 $c $b $a결과는 가 됩니다 3 4 5 6 2 1.

답변2

혼란스러운 핵심 사항은 다른 답변에서 건너 뛰고 다음에서 찾을 수 있습니다.배쉬 매뉴얼 페이지:

read …(옵션)… [name ...]

    표준 입력에서 한 줄을 읽습니다...., 첫 번째 단어가 첫 번째 단어에 할당됩니다.이름, 두 번째 단어에서 두 번째 단어로이름, 나머지 단어와 중간 구분 기호가 마지막 단어에 할당됩니다.이름…         [강조가 추가되었습니다. ]

또는 출력에서 help read​​:

읽다…(옵션)…[이름...]

    표준 입력에서 한 줄 읽기필드로 분할합니다.

    읽다하나의 선표준 입력에서,...단어 분할과 마찬가지로 행은 첫 번째 단어가 첫 번째 NAME에 할당되고 두 번째 단어가 두 번째 NAME에 할당되는 등의 필드로 분할되며 나머지 모든 단어는 마지막 A NAME에 할당됩니다. …

핵심 내용: read한 줄 이상 읽지 마세요.

관련 정보