Bash星号省略以'。'开头的文件?

时间:2014-01-03 02:26:18

标签: bash file loops directory

我正在使用bash脚本迭代目录中的所有文件。但循环正在跳过以'。'开头的文件。例如'.bashrc'我不确定.bashrc是否未通过文件测试或是否从通配符'*'中省略。我试过围绕“$ item”的双引号,但结果相同。如何使这个循环包含.bashrc文件?

id=0     
cd $USERDIR
for item in *
do
    if [[ -f $item ]]; then
        cdir[$id]=$item
        id=$(($id+1))
        echo $item
    fi
done  

2 个答案:

答案 0 :(得分:6)

这不是循环省略这些文件,它是shell *的扩展。如果您还想要dotfiles,请使用:

for item in .* *

来自bash联机帮助页:

  

当模式用于路径名扩展时,名称开头或紧跟斜杠后面的字符"."必须明确匹配,除非shell选项{{1}已设置。

dotglob选项上的最后一句可能看起来很有用,但您应该警惕更改可能影响以后代码的选项。使用它们最安全的方法是确保将它们设置回原始值,例如:

dotglob

但是,在这种情况下,我只是坚持使用rest_cmd=$(shopt -p dotglob) # Get restoration command shopt -s dotglob # Set option for item in * ; do blah blah blah done ${rest_cmd} # Restore option ,因为这是一个简单的解决方案。

答案 1 :(得分:2)

您可以设置dotglob

shopt -s dotglob
for item in *; do echo "$item"; done