最佳答案
我有一个 bash shell 脚本,它循环遍历某个目录的所有子目录(但不包括文件)。问题是有些目录名包含空格。
下面是我的测试目录的内容:
$ls -F test
Baltimore/ Cherry Hill/ Edison/ New York City/ Philadelphia/ cities.txt
以及循环遍历目录的代码:
for f in `find test/* -type d`; do
echo $f
done
输出如下:
test/Baltimore test/Cherry Hill test/Edison test/New York City test/Philadelphia
樱桃山和纽约市被视为2或3个独立的条目。
我试着引用文件名,像这样:
for f in `find test/* -type d | sed -e 's/^/\"/' | sed -e 's/$/\"/'`; do
echo $f
done
但是没有用。
肯定有个简单的办法。
下面的答案很棒。但是为了使这个问题更加复杂-我并不总是想使用我的测试目录中列出的目录。有时候,我希望将目录名作为命令行参数传入。
我采纳了查尔斯关于设置 IFS 的建议,并提出了以下建议:
dirlist="${@}"
(
[[ -z "$dirlist" ]] && dirlist=`find test -mindepth 1 -type d` && IFS=$'\n'
for d in $dirlist; do
echo $d
done
)
除非命令行参数中有空格(即使这些参数被引用) ,否则这种方法也可以正常工作。例如,像这样调用脚本: test.sh "Cherry Hill" "New York City"
产生以下输出:
Cherry Hill New York City