Bash 스크립트 결과를 이해할 수 없습니다

Bash 스크립트 결과를 이해할 수 없습니다

스크립트는 다음과 같습니다.

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

결과는 3 4 5 6 2 1입니다. 이유를 설명할 수 있는 사람이 있나요?

답변1

read표준 입력의 각 줄을 단어로 나누기같은 방법쉘은 명령을 작성할 때 이를 수행합니다.이후:

첫 번째 단어는 첫 번째 이름에 할당되고 두 번째 단어는 두 번째 이름에 할당되는 식으로 나머지 단어와 중간 구분 기호는성에 할당됩니다.

귀하의 경우에는 a값 1을 할당하고 b값 2를 할당한 다음 c"3 4 5 6" 행의 나머지 부분을 가져옵니다. c( 3 4 5 6), 그 다음 b( 2), 그 다음 a( )을 인쇄하면 1보이는 결과를 얻을 수 있습니다.

이 경우 첫 번째 에서 이동할 행이 하나뿐이므로 루프는 아무 작업도 수행하지 않습니다 echo.

답변2

행의 최종 데이터는 c"3 4 5 6"을 포함하는 마지막 변수에 입력됩니다. 따라서 다음을 수행할 수 있습니다.

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

변수를 무시합니다 rest.

관련 정보