在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