我正在尝试使用“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
几天前我遇到了类似的问题此主题非常有帮助。希望你能从中找到灵感。