如何防止“for”划分目录名?

如何防止“for”划分目录名?

我正在尝试使用“for”循环列出所有隐藏目录:

for i in ``ls -a | grep '^\.'` `;
do 
    echo $i
done

问题在于循环将一些目录名一分为二。

例如:ls -a | grep '^\.'给我

.
..
.Deleted Items
.Drafts 
.Junk
.Junk E-mail
.Sent
.Sent Items
.Trash

但是我的循环给了我:

.
..
.Deleted
Items
.Drafts
.Junk
.Junk
E-mail
.Sent
.Sent
Items
.Trash

我该如何改进我的脚本,以便它不会划分目录名?

答案1

你不需要命令,ls因为 shell 将为你进行扩展,你应该引用"变量

for i in .*/
do
echo "$i"
done

答案2

除非有特别需要“for”,否则您可以尝试 while 循环:

ls -d .* | while read Name  
do  
    echo "$Name"  
done  

答案3

有很多方法可以解决这个问题,从查找到额外引用等等。

就我个人而言,我发现修改 IFS 变量很有用。IFS 用于确定列表项之间的换行符等for。因此,通过 将 IFS 设置为换行符IFS=$'\n'。这将使for循环读取到一行输入的末尾,然后再开始列表中的新项。这可能不是解决这个特定问题的最简单方法(Iain 的答案更优雅),但我发现它在很多情况下都非常有用。

答案4

几天前我遇到了类似的问题此主题非常有帮助。希望你能从中找到灵感。

相关内容