如何将包含空格的变量作为循环参数传递给bash?

时间:2013-02-28 08:54:53

标签: bash

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

#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/

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

您需要在引号中加$iecho "$i"

答案 2 :(得分:0)

不要$ i

这会打破空间

使用“$ i”