内部字段分隔符(Internal Field Separator,IFS)是shell脚本中的一个重要概念。在处理文本数据时,它可是相当有用。我们将会讨论把单个数据流划分成不同数据元素的定界符。内部字段分隔符是用于特定用途的定界符。IFS是存储定界符的环境变量。它是当前shell环境使用的默认定界字符串。

实例1:

1 data="name,sex,rollno,location"
  2 #我们可以使用IFS读取变量中的每一个条目
  3 oldIFS=$IFS
  4 IFS=","
  5 for item in $data;do
  6 echo Item: $item
  7 done
  8 IFS=$oldIFS
输入如下:
   Item: name
   Item: sex
   Item: rollno
   Item: location

IFS的默认值为空白字符(换行符、制表符或者空格)。

当IFS被设置为逗号时,shell将逗号解释成一个定界符,因此变量$item在每次迭代中选取由逗号分隔的字串作为变量值。

如果没有IFS设置成",",那么上面的脚本会将全部数据作为单个字符串打印出来。

实例2:

  1 #!/bin/bash
  2 line="root:x:0:0:root:/root:/bin/bash"
  3 oldIFS=$IFS;
  4 IFS=":"
  5 count=0
  6 for item in $line;do
  7 [ $count -eq 0 ] && user=$item;
  8 [ $count -eq 6 ] && shell=$item;
  9 let count++
 10 done;
 11 IFS=$oldIFS
 12 echo $user\'s shell is $shell;
输出为:
    root's shell is /bin/bash