在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:;(以反斜杠、n、冒號、分號作為分隔符)。注意:在IFS中,$'\n'和$'\t'才是換行符和制表符。
實例如下:
[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