sh/bash/dash/ksh/zsh等Shell脚本
-
sdjkx
- 帖子: 30
- 注册时间: 2008-03-27 22:30
- 来自: 深圳
-
联系:
#1
帖子
由 sdjkx » 2011-09-20 12:14
代码: 全选
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了
如何搞?
看好ubuntu
-
Methuselar
- 帖子: 122
- 注册时间: 2009-06-04 12:06
-
联系:
#2
帖子
由 Methuselar » 2011-09-20 12:27
硬要用shell来搞得话, 可以暂时把IFS替换掉:
OLDIFS=$IFS
IFS=$(echo -en "\n\b")
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
IFS=$OLDIFS
最好还是用find吧. 个人喜欢coreutils用足,shell次之...
Mea Culpa!
-
sdjkx
- 帖子: 30
- 注册时间: 2008-03-27 22:30
- 来自: 深圳
-
联系:
#3
帖子
由 sdjkx » 2011-09-20 13:15
Methuselar 写了:硬要用shell来搞得话, 可以暂时把IFS替换掉:
OLDIFS=$IFS
IFS=$(echo -en "\n\b")
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
IFS=$OLDIFS
最好还是用find吧. 个人喜欢coreutils用足,shell次之...
还是不行, 提示 IFS not found
看好ubuntu
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#4
帖子
由 lilydjwg » 2011-09-20 13:21
代码: 全选
find "${ScriptDirectory}" ! -name '.'
上次由
lilydjwg 在 2011-09-20 15:55,总共编辑 1 次。
-
我就是我2
- 帖子: 1215
- 注册时间: 2008-12-13 10:55
- 来自: the Earth
-
联系:
#5
帖子
由 我就是我2 » 2011-09-20 14:33
sdjkx 写了:代码: 全选
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了
如何搞?
代码: 全选
for i in “${ScriptDirectory}”/* ; do
echo "$i"
done
-
sdjkx
- 帖子: 30
- 注册时间: 2008-03-27 22:30
- 来自: 深圳
-
联系:
#6
帖子
由 sdjkx » 2011-09-20 17:30
感谢4楼和5楼的回复。
find 可以我知道也会,我只是想找到不用find的解决此问题的方法。
加引号的方法,我也想到过,但我是是这样加的
“${ScriptDirectory}/*”
当然不行。
谢谢两位,问题搞定!
看好ubuntu
-
naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
#7
帖子
由 naturalaw » 2011-09-20 18:04
sdjkx 写了:感谢4楼和5楼的回复。
find 可以我知道也会,我只是想找到不用find的解决此问题的方法。
加引号的方法,我也想到过,但我是是这样加的
“${ScriptDirectory}/*”
当然不行。
谢谢两位,问题搞定!
那是因为你不明白引号的意思?
引号要把变量给引起嘛。/分明不属于变量名
-
naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
#8
帖子
由 naturalaw » 2011-09-21 10:56
sdjkx 写了:感谢4楼和5楼的回复。
find 可以我知道也会,我只是想找到不用find的解决此问题的方法。
加引号的方法,我也想到过,但我是是这样加的
“${ScriptDirectory}/*”
当然不行。
谢谢两位,问题搞定!

还用了全角的引号。it should be ""
-
没人疼
- 帖子: 13
- 注册时间: 2010-01-11 13:13
#10
帖子
由 没人疼 » 2011-10-13 22:35
sdjkx 写了:代码: 全选
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了
如何搞?
代码: 全选
find ${ScriptDirectory}/ -type f -print0|xargs -0 ls -l
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#11
帖子
由 fnan » 2011-10-14 2:55
kose3@kose3-laptop:~$ ls -1 b
a b
n j
kose3@kose3-laptop:~$ s="b"
kose3@kose3-laptop:~$ for i in ${s}/*;do echo $i;done
b/a b
b/n j
kose3@kose3-laptop:~$
#怎么回事?
#明白了 ,s="b b"
#没 必要 就 不 动 IFS,find 效率不 高 ,五楼 的 .
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#12
帖子
由 fnan » 2011-10-14 3:53
没人疼 写了:sdjkx 写了:代码: 全选
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了
如何搞?
代码: 全选
find ${ScriptDirectory}/ -type f -print0|xargs -0 ls -l
#不 加引号?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#13
帖子
由 eexpress » 2011-10-14 9:28
for 那里就自动扩展了的。
你最好cd "$dir" 进入目录。
破shell就是这样麻烦的。来perl吧。
● 鸣学
-
没人疼
- 帖子: 13
- 注册时间: 2010-01-11 13:13
#14
帖子
由 没人疼 » 2011-10-17 11:01
fnan 写了:没人疼 写了:sdjkx 写了:代码: 全选
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了
如何搞?
代码: 全选
find ${ScriptDirectory}/ -type f -print0|xargs -0 ls -l
#不 加引号?
不用
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#15
帖子
由 fnan » 2011-10-17 19:05
没人疼 写了:fnan 写了:没人疼 写了:sdjkx 写了:代码: 全选
for i in ${ScriptDirectory}/* ; do
echo "$i"
done
ScriptDirectory是个路径,有带空格的目录名,然后echo输出就被那个空格截断了
如何搞?
代码: 全选
find ${ScriptDirectory}/ -type f -print0|xargs -0 ls -l
#不 加引号?
不用
#LZ想解决目录名带空格,不是文件名带空格。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。