我编写了一个shell脚本来读取文件中的所有行,标记每一行以提取特定的单词。第一行读得正确,但从第二行看,预期的单词没有正确阅读。期待你的建议。
while read -ra line;
do
netmask="${line[5]}"
echo "netmask is $netmask" // first line reading is correct, second line onwards its showing
wrong output
IFS='.' tokens=($netmask)
prefix=0
for i in 0 1 2 3
do
var="${tokens[$i]}"
# i have a logic to calculate number of 1's in the number.
done
done < routes.shroute.sh的内容如下
route add -net 10.212.220.0 netmask 255.255.255.0 gw 10.213.248.1
route add -net 10.212.220.0 netmask 255.255.128.0 gw 10.213.248.1实际输出
netmask is 255.255.255.0
netmask is 128预期产出
netmask is 255.255.255.0
netmask is 255.255.128.0额外注意事项:
我的目标是(网络概念)
从文件(每一行描绘一条路由)中读取所有行,从每一行提取网络掩码(例如: 255.255.255.255)
的前缀长度。
发布于 2020-03-29 13:39:36
问题是您设置了IFS='.',因此对于数组上的第二个read,line将被错误地设置。
修复它的一种方法是保存原始的IFS,然后在适当的时候重置它。例如,
OldIFS=$IFS
while read -ra line; do
netmask="${line[5]}"
echo "netmask is $netmask"
IFS='.' tokens=($netmask)
prefix=0
for i in 0 1 2 3; do
var="${tokens[$i]}"
done
IFS=$OldIFS
done < routes.sh您在更改IFS时必须小心,否则会发生奇怪的事情。
https://stackoverflow.com/questions/60913463
复制相似问题