在shell中使用for循环语句时,参数列表有时候需要将空格纳入参数当中,这时就不好使用空格作为分隔符。如下例中,我实际想要输出的是a1、a2、b1、b2以及hello world,但却输出了如下内容:
[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的分隔符。
IFS可以指定单个字符作为分隔符,IFS=:(以冒号作为分隔符);IFS也可以指定多个字符作为分隔符,IFS= :;(以反斜杠、n、冒号、分号作为分隔符)。注意:在IFS中,$' '和$' '才是换行符和制表符。
实例如下:
[root@youxi1 ~]# vim a.sh IFS=$' ' list="a1a2 a3" #!/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