免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 26506 | 回复: 23
打印 上一主题 下一主题

关于IFS的疑问  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-15 21:31 |只看该作者 |正序浏览
正在看网中人的13问,看到IFS有一些疑问,请教大家:

1、如果我没保存原IFS,怎么用语句直接设置IFS
IFS="  \n\t"
这样设对吗,是恢复默认的吗??

2、我看说明中有:
IFS=
IFS=;
是一样的意思,我不明白既然一样为什么要用第二种形式呢??有什么特殊意义吗??还是仅用来区别与IFS=";"的不同。
第二种形式中的分号怎么解释??

3、默认IFS时如果
A="   aaa"
echo $A
结果当然是
aaa
前面没有空格
但是
A=";;;;aaa"
IFS=";"
echo $A 时
结果却是
    aaa
前面有四个空格,按道理不是应该没有空格吗?这是怎么回事呢??

4、文件b的内容是
echo $*
echo $1

#IFS=";"
#./b  111    22222

结果和不设IFS是一样的,都是
111 2222    (--中间一个空格)
111
为什么在执行命令时IFS不起作用呢??
我想的是如果起了作用,shell不就把整行看做无参数的命令了吗,shell就应该说找不到该命令了,呵呵,当然不想这样,我只是试验一下,这里为什么就不起作用了呢???

论坛徽章:
0
24 [报告]
发表于 2007-09-19 10:55 |只看该作者
学习ing

论坛徽章:
0
23 [报告]
发表于 2006-12-11 11:58 |只看该作者
各位的用心良苦,是我等今后成长的动力。

论坛徽章:
0
22 [报告]
发表于 2005-10-15 13:53 |只看该作者

关于IFS的疑问

真的是不好掌握,尤其是平台不同甚至版本不同,可能都稍有差异...
先了解一下基本的就行了,高深的一般用的少,实在不行就想别的办法先凑和一下吧

论坛徽章:
0
21 [报告]
发表于 2005-10-15 11:00 |只看该作者

关于IFS的疑问

O'Reilly bash 谁有中文版吗?

论坛徽章:
0
20 [报告]
发表于 2005-08-12 17:17 |只看该作者

关于IFS的疑问

自問自答!我想我都清楚了!

shell由stdin收進來的command line做解析,拆成字段.這一步是由一組固定的中介字符來區隔出不同的字段(其中包含white space).

接著進行後續的處理,其中包含了變數替換這一步,在這時會參考IFS變數來區分出其它的字段.

一切的解答都在O'Reilly bash 第七章呀!

论坛徽章:
0
19 [报告]
发表于 2005-08-10 20:48 |只看该作者

关于IFS的疑问

原帖由 "lightspeed" 发表:

1.  IFS 空白在输入的开始和结束处忽略。
2.  输入中每个非 IFS 空白的 IFS 字符,以及任何相邻的 IFS 空白,定界一个字段。
3. 非零长度 IFS 空格对字段进行定界。

原帖由 "lightspeed" 发表:

1. IFS 只对参数扩展有作用, $* 是 $1 - $n, 不包括 $0

2. IFS 对参数位置无作用. 参数位置由空白字符及有无" " 决定

所以不可能出现你想象的情况.


不好意思,lightspeed兄,是否能再將上述的二段內容再做解釋,在下實在很想了解其中的義意.

另外bash在解析shell prompt與<CR>字符之間的內容時,是不是不參考IFS變量?但若其中有做變量替換時則會?因為在下的測試結果如下:

  1. $ IFS=I
  2. $ cdI/etc
  3. -bash: cdI/etc: No such file or directory
复制代码

I仍然不是IFS所以不能區分出command name(cd)及argument(/etc)


  1. $ IFS=i
  2. $ var="one tw three four five six seven"
  3. $ for n in $var eight nine;do echo \["$n"\];done
  4. [one tw three four f]
  5. [ve s]
  6. [x seven]
  7. [eight]
  8. [nine]
复制代码

該例在做$var變量替換時,參考了IFS變量,以i區分出[one tw three four f]、[ve s]及[x seven]三個位置參數,但eight及nine仍不為所動.

說不定我若參透上面那二段話的意思,答案就出來了!  f^^

论坛徽章:
0
18 [报告]
发表于 2005-08-10 19:41 |只看该作者

关于IFS的疑问

WA,一群牛人!!学习~~~~~~~~~~~~~~~~

论坛徽章:
0
17 [报告]
发表于 2005-08-10 17:07 |只看该作者

关于IFS的疑问

name=value command 其name=value只有command會參考(而且只這次會參考).

所以下面的例子才會如此:
$ A="aaa"
$ A="bbb"  . ./1.sh
$ echo $A
显示:
bbb
aaa

而$ A="bbb"  ./1.sh應該也是一樣的情形,只是差在有沒有sub shell中執行而己.



初到貴寶地,請多指教!  f^^

论坛徽章:
0
16 [报告]
发表于 2005-03-18 14:35 |只看该作者

关于IFS的疑问

知道了,我把最基本的原则忘了,汗啊。。。。。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP