제가 겪은 테스트 문제는 다음과 같습니다.
다음 명령 시퀀스는 어떤 출력을 생성합니까?
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