在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