现在的位置: 首页 > 综合 > 正文

shell IFS readLine.sh

2016年02月06日 ⁄ 综合 ⁄ 共 879字 ⁄ 字号 评论关闭
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中的第一个值来确定的!下面这两个例子还有细微的差别!





抱歉!评论已关闭.