Shell for与分隔符

在shell for...in...使用中,经常会遇到分隔符问题,由于for默认把空格、换行符、Tab都当成换行符,所以很多时候遍历不到我们想要的数据,如有一test.txt文件内容如下:

1
2
username:"SenLin",age:16
username:"Zhang Sun",age:20

如果使用for i in $(cat test.txt);do echo $i;done,你会看到输出是三行:

1
2
3
username:"SenLin",age:16
username:"Zhang
Sun",age:20

这与我们想要的数据不同,按我以前的做法都是直接换Python脚本解决了,但其实shell也有解决这个问题的方法,就是改变分隔符,上面的例子可以设置只以换行符为分隔符来执行,如下:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
testFile=/tmp/test.txt
OLDIFS=$IFS #保存原来的分隔符
IFS=$'\n' #设置分隔符

for i in `cat $testFile`;do
echo $i
done

IFS="$OLDIFS" #还原成原来的分隔符

输出:

1
2
username:"SenLin",age:16
username:"Zhang Sun",age:20

值得注意的是运行脚本时要注意保存原来的分隔符,在运行后还原,还有分隔符的写法:

1
2
3
4
换行符: IFS=$'\n'          #不能直接写成'\n',会被当成以\或n为分隔符
空格符: IFS=' ' #空格符会把连续空白也算进去
多IFS: IFS='+-:' #会把+或-或:都当成分隔符
换行符或其他:IFS=$'\n:' #会把换行符或:当成分隔符

- - END - -


腾讯云
0%