bash 루프를 사용하여 파일의 각 줄에서 특정 작업을 수행하려면 어떻게 해야 합니까?

bash 루프를 사용하여 파일의 각 줄에서 특정 작업을 수행하려면 어떻게 해야 합니까?
ckim@ckim-ubuntu:~/test$ cat tt
#define a b
#define c d
ckim@ckim-ubuntu:~/test$ for i in `cat tt`; do echo $i; done
#define
a
b
#define
c
d

$i 변수는 공백이나 Enter로 구분된 각 단어를 사용합니다. $i가 cat명령의 각 줄을 나타내도록 하려면 어떻게 해야 합니까 ? for 또는 while을 사용하면 나에게 잘 작동합니다. 그게 bash입니다. 감사합니다!

추가: line 전체를 반복할 수 있지만 while read line; do echo $line; done < tt각 행에 대해 작업을 수행하고 싶습니다. 이 출력을 for 루프에 전달하면 각 단어로 분할됩니다.

답변1

@glennjackman의 의견에서 이 작업을 수행하는 방법을 배웠습니다. 이것이 제가 원래 하고 싶었던 일입니다(파일을 grep하고 이전 파일 경로를 추출함 :).

ckim@ckim-ubuntu:~/U-BOOT/u-boot$ cat tt
dir0/Kconfig:config SUPPORT_SPL
dir1/Kconfig:select SUPPORT_SPL
dir2/Kconfig:select SUPPROT SPL
ckim@ckim-ubuntu:~/U-BOOT/u-boot$ while IFS= read -r i; do echo "${i%:*}"; done < tt
dir0/Kconfig
dir1/Kconfig
dir2/Kconfig

답변2

추가하신 내용이 원하는 방식으로 작동하는 것 같습니다.

#!/bin/sh
while read line; do
    echo "$line"
done < tt

산출:

#define a b
#define c d

관련 정보