为什么要指定换行符,我们看一个例子

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

data="
a b c
d e f
"

for i in $data
do
echo $i
done

输出的结果是:

1
2
3
4
5
6
a
b
c
d
e
f

因为系统默认把空格和换行都当作了分隔符。为了避免这种情况,我们可以手动指定分隔符:

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

data="
a b c
d e f
"

IFS=$'\n' # 指定分隔符为换行
for i in $data
do
echo $i
done

这样打印出来的就是:

1
2
a b c
d e f

再看一个例子:

1
2
3
4
5
6
#!/bin/bash
a="aa,bb,cc,dd,ee"
for i in $a
do
echo $i
done

输出为:
aa,bb,cc,dd,ee

我们想要的输出结果可能是这样

1
2
3
4
5
aa
bb
cc
dd
ee

可以修改成这样:

1
2
3
4
5
6
7
8
9
#!/bin/bash
oldIFS=$IFS #定义变量为默认的IFS
IFS=, #设置默认的分隔符
a="aa,bb,cc,dd,ee"
for i in $a
do
echo $i
done
IFS=$oldIFS #还原默认值

还原默认值这一步也可以不操作,具体看这个操作会不会影响到后面的 shell 命令。