打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
笑遍世界 ? shell中的IFS详解

shell中的IFS详解

十二 10th, 2011
4,019 views | 发表评论 | Trackback

在bash中IFS是内部的域分隔符,manual中对其的叙述如下:
IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is “”.
如下是一些值得注意的地方。
1. IFS的默认值为:空白(包括:空格,tab, 和新行),将其ASSII码用十六进制打印出来就是:20 09 0a (见下面的shell脚本)。
2. IFS对空格的空白的处理和其他字符不一样,左右两半的纯空白会被忽略,多个连续的空白被当成一个IFS处理。
3. S*中使用IFS中的第一个字符。
4. awk中的FS(域分隔符)也和IFS有类似的用法和作用。

我写了一个shell脚本来演示IFS的用法和作用,如下:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
#! /bin/bash#author: Jay Ren#date: 2011.12.10 echo "----------------------------------IFS test--------------------------------"echo "default \$IFS is:(ASSII in hexadecimal value)"echo -n "$IFS" | xxd -g 1 | awk -F":" '{print $2}' | awk -F" " '{print $1, $2, $3}'echo "by default, IFS should be a SPACE, a HORIZONTAL TAB, or a LINC FEED." function output_args_one_per_line(){arg_list=$*echo "\$*='$*'"for arg in $arg_listdoecho "[$arg]"done} echo "--------------------------------------------------------------------------"echo "set IFS=' ' #dealing with SPACE in IFS is different with other chars."echo "var=' a b c '"IFS=' 'var=" a b c "output_args_one_per_line $var echo "--------------------------------------------------------------------------"echo "set IFS=':'"echo "var='::a:b::c:::'"IFS=':'var="::a:b::c:::"output_args_one_per_line $var echo "--------------------------------------------------------------------------"echo "set IFS='+:-;' #but \$* just use 1st char in IFS as the separator."echo "var='::a:b::c:::'"IFS='+:-;'var="::a:b::c:::"output_args_one_per_line $var echo "--------------------------------------------------------------------------"echo "set IFS='-+:;' #but \$* just use 1st char in IFS as the separator."echo "var='::a:b::c:::'"IFS='-+:;'var="::a:b::c:::"output_args_one_per_line $var echo "--------------------------The END of IFS test-----------------------------"

运行这个脚本结果如下:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
master@jay-linux:~/workspace/mygit/shell/sh2011$ ./IFS-test.sh----------------------------------IFS test--------------------------------default $IFS is:(ASSII in hexadecimal value)20 09 0aby default, IFS should be a SPACE, a HORIZONTAL TAB, or a LINC FEED.--------------------------------------------------------------------------set IFS=' '   #dealing with SPACE in IFS is different with other chars.var='  a b  c   '$*='a b c'[a][b][c]--------------------------------------------------------------------------set IFS=':'var='::a:b::c:::'$*='::a:b::c::'[][][a][b][][c][]--------------------------------------------------------------------------set IFS='+:-;'   #but $* just use 1st char in IFS as the separator.var='::a:b::c:::'$*='++a+b++c++'[][][a][b][][c][]--------------------------------------------------------------------------set IFS='-+:;'   #but $* just use 1st char in IFS as the separator.var='::a:b::c:::'$*='--a-b--c--'[][][a][b][][c][]--------------------------The END of IFS test-----------------------------
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
shell 运算
Shell编程入门:Linux解释器原理-源码天堂-华夏名网资讯中心 虚拟主机,域名注册,...
shell编程范例之字符串操作 - wuye_chinaunix
Shell编程
shell大全
[汇总]shell笔试
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服