시퀀스 명령 및 테스트 문제

시퀀스 명령 및 테스트 문제

제가 겪은 테스트 문제는 다음과 같습니다.

다음 명령 시퀀스는 어떤 출력을 생성합니까?

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

이유는 모르겠습니다. 누군가 나에게 이것을 설명해 줄 수 있습니까?

(처음에는 대답이 '예'라고 생각했습니다 3 2 1.)

답변1

맨페이지에서 다음을 읽어보세요.

표준 입력 또는 -u 옵션이 제공되는 경우 파일 설명자 FD에서 행을 읽습니다. 단어 분할과 마찬가지로 행은 첫 번째 단어가 첫 번째 NAME에 할당되고 두 번째 단어가 두 번째 NAME에 할당되는 등의 필드로 분할되며 나머지 모든 단어는 마지막 NAME에 할당됩니다. $IFS에 있는 문자만 단어 구분 기호로 인식됩니다.

이러한 이유로 나는 일반적으로 "쓰레기" 변수를 사용하여 남아 있는 모든 것을 수집합니다.

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

사용 중:

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

관련 정보