jot*_*t19 1 directory bash loops file
我正在使用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
Run Code Online (Sandbox Code Playgroud)
这不是循环省略那些文件,而是*shell 的扩展.如果你也想要dotfiles,请使用:
for item in .* *
Run Code Online (Sandbox Code Playgroud)
从bash联机帮助页:
当模式用于路径名扩展时,除非设置了shell选项,否则
"."必须明确匹配名称开头或紧跟斜杠后面的字符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
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,我只是坚持使用,.* *因为这是一个简单的解决方案.
你可以设置 dotglob
shopt -s dotglob
for item in *; do echo "$item"; done
Run Code Online (Sandbox Code Playgroud)