processLine()
{
line="$@"
echo $line
}
FILE=""
if [ "$1" == "" ]; then
FILE="/dev/stdin"
else
FILE="$1"
if [ ! -f $FILE ]; then
echo "$FILE : does not exists"
exit 1
elif [ ! -r $FILE ]; then
echo "$FILE : can not read"
exit 2
fi
fi
BAKIFS=$IFS
IPS=$(echo -en "nb")
exec 3<&0
exec 0<$FILE
while read line
do
processLine $line
done
exec 0<&3
IFS=$BAKIFS
exit 0
使用IFS来进行文件分析,或者是对文件特定的字符进行分割
#shell environment $IFS useage # S : Internal Field Separator IFS=: a=Hello:World echo $a #OutPut is Hello World #IFS save Key Value, maybe space\tab\'\n'\other token #sparse input or output key value # The following code segment will only work in ksh, # and it will fail in bash IP=192.168.0.254 IFS="." TMPIP=$(echo $IP) IFS=" " #space echo $TMPIP | read ip1 ip2 ip3 ip4 INVIP=$ip4.$ip3.$ip2.$ip1 echo $INVIP我们将IFS的内容输出来,但是由于一些内容是不能直接显示出来,但是我们可以将使用一些格式化将内容输出:
echo $IFS | od -d echo $IFS | od -b echo $IFS | od -x分别是使用不同进制的表示出来:
如果是用冒号("")引起来,表示这个变量不用IFS替换!!所以可以看到这个变量的"原始值"。反之,如果不加引号,输出时会根据IFS的值来分割后合并输出! $* 是按照IFS中的第一个值来确定的!下面这两个例子还有细微的差别!
原文地址:http://blog.csdn.net/berguiliu/article/details/43059841