自定義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