LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1263|回复: 9

问个很菜的问题,关于for循环的

[复制链接]
发表于 2008-6-18 16:19:45 | 显示全部楼层 |阅读模式
for.sh

  1. #!/bin/bash
  2. touch a b c
  3. for file in a b c d
  4. do
  5.     echo $file
  6. done
  7. exit 0
复制代码

结果:

  1. $ ./for.sh
  2. a
  3. b
  4. c
  5. d
复制代码

for后面不是做比较吗?比较的时候同时也会附值吗?
为什么d会输出来?

    ps:希望不要被鄙视!
发表于 2008-6-18 19:39:29 | 显示全部楼层
这里,shell把“a b c d”都理解为四个字符了,不是你创建的文件
回复 支持 反对

使用道具 举报

发表于 2008-6-19 09:20:45 | 显示全部楼层
如楼上所讲,空格是 for 的分界符。
回复 支持 反对

使用道具 举报

发表于 2008-6-19 19:52:05 | 显示全部楼层
楼主是四空格缩进派,支持四空格缩进!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-19 21:41:13 | 显示全部楼层
Post by ggyy_sun;1863659
这里,shell把“a b c d”都理解为四个字符了,不是你创建的文件
  1. for file in *
复制代码
这样是将当前目录下的文件名作为字符串赋给file变量?


ps:四格缩进在终端下看着似乎更紧凑:)
回复 支持 反对

使用道具 举报

发表于 2008-6-19 23:26:39 | 显示全部楼层
弄清shell的扩展替换机制 && 人肉扩展
回复 支持 反对

使用道具 举报

发表于 2008-7-3 11:31:40 | 显示全部楼层
这里输出的仅仅是$file变量而已,跟文件没任何关系。
回复 支持 反对

使用道具 举报

发表于 2008-7-6 19:41:35 | 显示全部楼层
Post by lvcc;1863568
for.sh

  1. #!/bin/bash
  2. touch a b c
  3. for file in a b c d
  4. do
  5.     echo $file
  6. done
  7. exit 0
复制代码

结果:

  1. $ ./for.sh
  2. a
  3. b
  4. c
  5. d
复制代码

for后面不是做比较吗?比较的时候同时也会附值吗?
为什么d会输出来?

    ps:希望不要被鄙视!


C语言中的FOR语句是有比较的,那是用于循环的结束.而这里shell中的FOR不是那么用的
回复 支持 反对

使用道具 举报

发表于 2008-7-9 02:22:11 | 显示全部楼层
sorry,Plz delete this post for me.3ks
回复 支持 反对

使用道具 举报

发表于 2008-7-9 02:24:21 | 显示全部楼层
楼主肯定是以为shell中的for和传统的for语句一样,都有一个start、step和end,但是shell中的for却不是这样,它把in后面的所有内容当作一个列表,然后遍历这个列表中的每一个元素,再把得到的值交给前面的$file变量,所以在do语句体里面就可以echo $file了。

很多脚本的for命令的语法不尽相同,for example:perl, batch script, ruby etc.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表