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。谢谢你!
ADD :我可以遍历该行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