我来到了 bash 书中的一个章节,该章节试图向我展示您可以结合 while 循环使用 read 语句来读取文件的每一行,然后将前两个单词捕获到两个变量中。但是,我在下面编写了自己的脚本来对其进行测试。
$ 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 组合,所以我想专注于那)。
这就是
read
工作原理:如果其输入中的字段多于变量,则为最后一个变量分配相应的字段和所有剩余的字段。典型的做法是命名这个变量_
:请参阅Understanding "IFS= read -r line"以深入讨论
read
和Why is using a shell loop to process text considered bad practice?