shell IFS readLine.sh

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中的第一个值来确定的!下面这两个例子还有细微的差别!

技术分享

技术分享

技术分享



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。