2

美好的一天,我正在创建一个脚本来读取路径的一级子文件夹/目录。脚本是这样的:

#loopdir.sh
for i in `ls -d $1`
do
echo $i
done

但是当我尝试使用它来读取 /media/My\ Passport/ 时,它会将参数读取为两个不同的目录:

$ ./loopdir.sh /media/My\ Passport/
ls: cannot access /media/My: No such file or directory
Passport/
4

3 回答 3

5

尝试这样做(我的理解是您想列出子目录,对吗?):

for i in "$1"/*; do
    echo "${i%/}"
done

解析ls输出是个坏主意:它是一种交互式查看文件信息的工具。它的输出是为人类格式化的,并且会导致脚本中的错误。使用 glob 或 find 代替。了解原因: http: //mywiki.wooledge.org/ParsingLs

并且(最后但并非最不重要): 使用更多报价!它们至关重要。此外,了解 ' 和 " 和 ` 之间的区别。参见http://mywiki.wooledge.org/Quoteshttp://wiki.bash-hackers.org/syntax/words

于 2013-02-28T09:11:31.823 回答
1

您需要$i用引号括起来:echo "$i"

于 2013-02-28T08:55:53.927 回答
0

不要$i

这将被空间打破

使用“$i”

于 2013-02-28T09:32:46.473 回答