免费注册 查看新帖 |

Chinaunix

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

递归把一个目录包括子目录中的所有文件转换成unix格式 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-06-09 12:02 |显示全部楼层
for x in "$(ls)"

论坛徽章:
0
2 [报告]
发表于 2009-06-09 13:32 |显示全部楼层
原帖由 ywlscpl 于 2009-6-9 13:19 发表
for x in $(ls)
ls的输出,shell会以IFS分割然后进行循环

加引号的话ls的内容会作为一个整体,只循环一次



我的想法和你一样

可是有一种情况很奇怪:

  1. [root@0609-0090 ~/cafe/sh]# ls | cat
  2. 3-3.sh
  3. abc sa
  4. at--help.txt
  5. chars
  6. iii
  7. puzzle.sh
  8. test-suspend.sh
  9. [root@0609-0090 ~/cafe/sh]# for i in "$(ls)"; do echo $i; done
  10. 3-3.sh abc sa at--help.txt chars iii puzzle.sh test-suspend.sh
  11. [root@0609-0090 ~/cafe/sh]# for i in "$(ls)"; do echo "$i"; done
  12. 3-3.sh
  13. abc sa
  14. at--help.txt
  15. chars
  16. iii
  17. puzzle.sh
  18. test-suspend.sh
  19. [root@0609-0090 ~/cafe/sh]# uname -a
  20. CYGWIN_NT-5.1 0609-0090 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin
  21. [root@0609-0090 ~/cafe/sh]# echo $SHELL
  22. /bin/bash
  23. [root@0609-0090 ~/cafe/sh]#

复制代码

论坛徽章:
0
3 [报告]
发表于 2009-06-09 13:45 |显示全部楼层

回复 #12 ly5066113 的帖子

呵呵,明白啦,谢谢

论坛徽章:
0
4 [报告]
发表于 2009-06-09 14:03 |显示全部楼层
因为echo $(ls),把换行符换成了空格(因为换行符是IFS)
echo "$(ls)":双引号里面的的不进行字段拆分,自然也就没有换行符到空格的转换啦

其实我说明白了,是说明白了,原来那个循环只循环了一次

论坛徽章:
0
5 [报告]
发表于 2009-06-09 14:21 |显示全部楼层
那是因为ls会判断输出连接到的文件类型,如果输出到终端,会根据终端的几何特征以不同的格式输出。如果连接到普通文件或者管道,或者是在命令替换中输出,那么就是每个文件名一行了。你可以试一下 ls | cat,或者直接ls | od -Ad -tc 看看有没有\n

论坛徽章:
0
6 [报告]
发表于 2009-06-09 15:06 |显示全部楼层

回复 #24 ly5066113 的帖子

这个我明白,暮木同学的疑问是为什么ls输出的结果本来是没有\n的,为什么echo "$(ls)"就有了\n
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP