免费注册 查看新帖 |

Chinaunix

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

请教echo方面的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-12 22:36 |只看该作者 |倒序浏览
请教echo方面的问题?

为何这两行命令执行结果有差异?能帮我解释吗?

一:

Administrator@typhoon-1 ~
$ echo $(echo "123456a bCDEFcd" |grep -o "[0-9]"
1 2 3 4 5 6

二:
Administrator@typhoon-1 ~
$ (echo "123456a bCDEFcd" |grep -o "[0-9]"
1
2
3
4
5
6

谢谢!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-11-12 22:42 |只看该作者

请教echo方面的问题?

IFS的问题吧
/home/lee#echo $(echo "123456a bCDEFcd" |grep -o "[0-9]"
1 2 3 4 5 6
/home/lee#IFS=
/home/lee#echo $(echo "123456a bCDEFcd" |grep -o "[0-9]"
1
2
3
4
5
6

论坛徽章:
0
3 [报告]
发表于 2004-11-12 23:29 |只看该作者

请教echo方面的问题?

谢谢,那我要切换到原来的IFS,该如何办?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-11-12 23:33 |只看该作者

请教echo方面的问题?

IFS='
'

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-11-13 00:56 |只看该作者

请教echo方面的问题?

原帖由 "寂寞烈火" 发表:
IFS='
'

嗯... 不知 hard quote 中有哪些字符呢?
在預設上, IFS 由 <space><ht><nl> 這三個字符組成:
  1. [netman@www tmp]$ echo -n "$IFS" | od -a
  2. 0000000  sp  ht  nl
  3. 0000003
复制代码

若烈火兄上面只設為一個 <nl> 的話, 那就不是"還原"預設值而是重新定議了.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-11-13 00:59 |只看该作者

请教echo方面的问题?

[quote]原帖由 "網中人"]若烈火兄上面只設為一個 <nl> 的話, 那就不是"還原"預設值而是重新定議了.[/quote 发表:

呵呵,我也是只知其一,还望网兄指教 .谢谢! ^_^

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-11-13 01:19 |只看该作者

请教echo方面的问题?

指教不敢當...  ^_^
我剛才 try 了一下, 似乎不好設, 不過我也說不出個所以然...
看下面我用 A 來代替 IFS 設定:
  1. [netman@www tmp]$ echo -n "$IFS" | od -a
  2. 0000000  sp  ht  nl
  3. 0000003
  4. [netman@www tmp]$ A=$(echo -en " \t\n")
  5. [netman@www tmp]$ echo -n "$A" | od -a
  6. 0000000  sp  ht
  7. 0000002
复制代码

你會發現 echo -e 那行若用 \n 結尾時, 結果會少掉了 <nl> ....
但, 若在 \n 後再加一個 <sp> 的話, 就沒問題:
  1. [netman@www tmp]$ A=$(echo -en " \t\n ")
  2. [netman@www tmp]$ echo -n "$A" | od -a
  3. 0000000  sp  ht  nl  sp
  4. 0000004
复制代码

因此, 我只能如此設定一個與 IFS 一模一樣的 A :
  1. [netman@www tmp]$ A=$(echo -en " \t\n ")
  2. [netman@www tmp]$ A="${A% }"
  3. [netman@www tmp]$ echo -n "$A" | od -a
  4. 0000000  sp  ht  nl
  5. 0000003
  6. [netman@www tmp]$ echo -n "$IFS" | od -a
  7. 0000000  sp  ht  nl
  8. 0000003
复制代码


其實, 要還原 IFS 最好的方法是在修改 IFS 之前, 先存為一個別的變量中:
  1. old_IFS="$IFS"
  2. IFS=
  3. ...... # do what ever
  4. IFS="$old_IFS"
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-11-13 01:29 |只看该作者

请教echo方面的问题?

其實, 要還原 IFS 最好的方法是在修改 IFS 之前, 先存為一個別的變量中:

我的IFS初始值是这样的

  1. /home/lee#set|grep -A1 IFS|cat -A
  2. IFS=' ^I$
  3. '$
复制代码

也就是说,这个IFS包括了什么
不过,您说的保存原始的IFS,处理完别的工作后,在恢复回来,确不失为一种好方法~ 谢谢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-11-13 01:39 |只看该作者

请教echo方面的问题?

用 cat -A 來看, 倒不如用 od -a 或 od -c 來看?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-11-13 01:41 |只看该作者

请教echo方面的问题?

[quote]原帖由 "網中人"]用 cat -A 來看, 倒不如用 od -a 或 od -c 來看?[/quote 发表:

呵呵,试一试去 再次感谢    
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP