sh/bash/dash/ksh/zsh等Shell脚本
-
YZard
- 帖子: 6
- 注册时间: 2006-08-11 20:43
#1
帖子
由 YZard » 2007-03-17 13:01
假设有一个目录,里面有些文件,我要打出他们的文件名:
代码: 全选
home
wegweg wewasdg # <== 这是一个带空格的文件名的文件
我写个shell来echo它
代码: 全选
for i in `ls`
do
echo $i
done
如果这样写的话,空格会被for判断成分割符,打出来就成这样了:
代码: 全选
home
wegweg
wewasdg
有什么办法解决?
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#2
帖子
由 eexpress » 2007-03-17 14:23
``的输出有些麻烦的,结果已经被扩展了。
ls -1
先成单列。
在在处理的时候,用“”包括。
● 鸣学
-
YZard
- 帖子: 6
- 注册时间: 2006-08-11 20:43
#3
帖子
由 YZard » 2007-03-17 21:39
eexpress,找到办法了!
直接
代码: 全选
for i in *
do
# do whatever you need here :)
done
但是就是要for之前cd进入目录
, 其余同上,处理字串的时候注意用""包括
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#4
帖子
由 eexpress » 2007-03-17 22:38
一般是这样啊,谁叫你帖子拐弯抹角,像要调用一长串命令
● 鸣学
-
peter_huang
- 帖子: 391
- 注册时间: 2006-11-07 14:32
#5
帖子
由 peter_huang » 2007-03-25 17:35
这样:
代码: 全选
OLDIFS=$IFS;
IFS=$'\n';
for i in `ls`
do
#do sth
done;
IFS=$OLDIFS;
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#6
帖子
由 BigSnake.NET » 2007-03-25 17:43
最佳方法是用find
代码: 全选
find -printf "%f\n"
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
young
- 帖子: 25
- 注册时间: 2005-05-15 7:41
#7
帖子
由 young » 2007-04-04 2:33
用*号才是正道.
代码: 全选
for f in *
do
xxxx "$f"
done
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#8
帖子
由 BigSnake.NET » 2007-04-04 13:32
young 写了:用*号才是正道.
代码: 全选
for f in *
do
xxxx "$f"
done
不能展开 . 开头的
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
young
- 帖子: 25
- 注册时间: 2005-05-15 7:41
#9
帖子
由 young » 2007-04-05 7:15
要点号的啊.
你可以 for f in .*
或者还是用ls.. 但不用 `ls -1`这种形式 ,而用 "$(ls -a1)"
代码: 全选
for f in "$(ls -a1)"
do
echo "$f"
done
-
laborer
- 帖子: 1016
- 注册时间: 2005-10-25 11:15
-
联系:
#10
帖子
由 laborer » 2007-04-05 22:00
young 写了:或者还是用ls.. 但不用 `ls -1`这种形式 ,而用 "$(ls -a1)"
代码: 全选
for f in "$(ls -a1)"
do
echo "$f"
done
这样只会循环一次,f等于ls -a1输出的所有内容。
-
young
- 帖子: 25
- 注册时间: 2005-05-15 7:41
#11
帖子
由 young » 2007-04-06 5:45
汗一个... 看来不该拿echo试验 - -"
laborer 写了:young 写了:或者还是用ls.. 但不用 `ls -1`这种形式 ,而用 "$(ls -a1)"
代码: 全选
for f in "$(ls -a1)"
do
echo "$f"
done
这样只会循环一次,f等于ls -a1输出的所有内容。