While 루프를 사용하여 읽는 올바른 방법은 무엇입니까

While 루프를 사용하여 읽는 올바른 방법은 무엇입니까

나는 while 루프와 결합된 read 문을 사용하여 파일의 각 줄을 읽은 다음 처음 두 단어를 두 변수로 캡처할 수 있다는 것을 보여주려고 bash 책의 일부를 읽었습니다. 그러나 나는 그것을 테스트하기 위해 내 자신의 스크립트를 작성했습니다.

$ cat hoststest 
192.168.1.1 pc1 word3 word4
192.168.1.2 pc2 word3 word4
$ cat t13
#!/bin/bash
while read ip_address pc_number restofstuff
do
if [ ! -z "$ip_address" ]; then
    echo "IP is $ip_address and its for $pc_number"
fi
done < "/home/john/hoststest"
$ ./t13
IP is 192.168.1.1 and its for pc1
IP is 192.168.1.2 and its for pc2

초기 테스트에서는 세 번째 변수 "restofstuff"가 없었습니다. pc1 또는 pc2를 값으로 가져오는 대신 pc_number 변수는 pc_number를 행의 나머지 부분으로 저장합니다. 그래서 나머지 줄을 모두 pc_number의 일부로 포함하지 않도록 세 번째 변수를 추가했습니다. 지금 내가 한 일은 이 "restofstuff" 변수를 사용하여 작동하지만 제대로 하고 있는 것 같지는 않습니다. 나는 기본적으로 아무것도 하지 않는 "죽은" 변수를 만들었습니다. 읽기 + while 루프를 계속 사용하려고 하면 올바른 접근 방식은 무엇입니까(참고로 이것은 내가 사용/학습 중인 while 루프 + 읽기 조합이므로 이에 계속 집중하고 싶습니다).

답변1

그게 다야read유효: 입력에 변수보다 필드가 더 많은 경우 마지막 변수가 해당 필드와 나머지 모든 필드에 할당됩니다. 일반적인 접근 방식은 이 변수의 이름을 지정하는 것입니다 _.

while read ip_address pc_number _

바라보다"IFS=read-r-line" 이해심도 있는 논의를 하고 read,쉘 루프를 사용하여 텍스트를 처리하는 것이 왜 나쁜 습관으로 간주됩니까?

관련 정보