스크립트는 다음과 같습니다.
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
.