自定义Shell分隔符

  在shell中使用for循环语句时,参数列表有时候须要将空格归入参数当中,这时就很差使用空格做为分隔符。以下例中,我实际想要输出的是a一、a二、b一、b2以及hello world,但却输出了以下内容:shell

[root@youxi1 ~]# vim a.sh
#!/bin/bash
list="a1 a2 b1 b2 \"hello world\""
for var in $list
do
 echo $var
done
[root@youxi1 ~]# sh a.sh
a1
a2
b1
b2
"hello
world"

  默认状况下,shell会以空格、制表符、换行符做为分隔符,但遇到以上状况时,须要使用IFS来自定义shell的分隔符。vim

  IFS能够指定单个字符做为分隔符,IFS=:(以冒号做为分隔符);IFS也能够指定多个字符做为分隔符,IFS=\n:;(以反斜杠、n、冒号、分号做为分隔符)。注意:在IFS中,$'\n'和$'\t'才是换行符和制表符。bash

  实例以下:ssh

[root@youxi1 ~]# vim a.sh
IFS=$'\n'
list="a1a2\na3"
#!/bin/bash
IFS=:
for var in `tail -4 /etc/passwd | head -2`
do
 echo $var
done
[root@youxi1 ~]# sh a.sh
polkitd
x
999
998
User for polkitd
/
/sbin/nologin
sshd
x
74
74
Privilege-separated SSH
/var/empty/sshd
/sbin/nologin