使用 While 循环进行读取的正确方法是什么

使用 While 循环进行读取的正确方法是什么

我读到一本 bash 书的一部分,它试图向我展示您可以使用 read 语句与 while 循环结合来读取文件的每一行,然后将前两个单词捕获到两个变量中。不过,我编写了自己的脚本来测试它。

$ 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”。发生的情况是,pc_number 变量不是仅获取 pc1 或 pc2 作为其值,而是将 pc_number 存储为该行的其余部分。因此,我添加了第三个变量,只是为了不将该行的所有其余部分作为 pc_number 的一部分。我所做的现在可以使用这个“restofstuff”变量,但感觉我做得不对。我基本上只是创建了一个不执行任何操作的“死”变量。如果我尝试继续使用 read + while 循环,那么正确的方法是什么(注意,这是我正在使用/学习的 while 循环 + read 组合,所以我想继续专注于那)。

答案1

就是这样read有效:如果输入中的字段多于变量,则将最后一个变量分配给相应的字段和所有剩余的字段。典型的做法是命名这个变量_

while read ip_address pc_number _

理解“IFS=读取-r行”进行深入讨论read, 和为什么使用 shell 循环处理文本被认为是不好的做法?

相关内容