- 论坛徽章:
- 0
|
正在看各置顶贴,还未找到答案。但因为比较急,所以先把问题发在这。
假设输入下列代码
read a ; for i in $a ; do echo $i ; echo 2 ; done
当提示用户输入时,输入*
那么当然会将当前目录下的文件打印出来,假设当前目录下只有a1,a2,a3等3个文件,那么得到
*(用户输入)
a1
2
a2
2
a3
2
这没有问题。
假设当前目录为/path/to/foo,将用户输入改为/path/to/foo/*,那么得到
/path/to/foo/*(用户输入)
/path/to/foo/a1
2
/path/to/foo/a2
2
/path/to/foo/a3
2
也没问题。
假设当前目录为/path/to/f oo(注意那个空格),问题来了:
输入/path/to/f oo/*或者/path/to/f\ oo/*,都得到
...(用户输入)
/path/to/f
2
oo/*
2
显然是空格的问题。
于是修改代码为
read a ; for i in "$a" ; do echo $i ; echo 2 ; done
再次输入/path/to/f oo/*或者/path/to/f\ oo/*,都得到
...(用户输入)
/path/to/f oo/*
2
$a不再展开。可以理解,但是问题是如何求全?即又要展开、又要兼顾空格的可能性。
在最后一种情况下,即
read a ; for i in "$a" ; do echo $i ; echo 2 ; done
如果当前目录为/path/to/foo,不再含空格,用户输入*,将得到
*(用户输入)
a1 a2 a3
2
何解?如果我在前面讲的够清楚,这显然不是我的需求,因为$i似乎只取了一次值。如何修正?
问题概括:
需要$i历遍用户输入的所有文件(用户可能利用通配符指定文件,需要能自动被识别并展开),但要照顾到路径包含空格的可能性。
写的比较罗嗦,希望讲清楚了问题。 |
|