为什么“$ path”/ {,。} *在其结果中包含“。*”?

时间:2017-05-26 00:08:13

标签: shell sh glob

我有一个bash脚本,我使用

循环遍历目录中的所有文件
for x in "$path/"{.,}*; do
    do some stuff here  
done

这会循环遍历所有文件和目录(这就是我想要的), 但它也给了我不存在的文件.*。 我在android上使用终端模拟器,所以它可能是一个错误。 我正在寻找一个shell解决方案,因为我没有大多数“普通Linux”命令,如sed。

1 个答案:

答案 0 :(得分:0)

如果您的外壳确实是Bash (如最初所述的问题)

运行以下命令:

shopt -s nullglob

将禁用没有匹配未展开的globs的默认行为。请注意,这会产生令人惊讶的副作用:设置nullglob后,ls -l *.NotFilenamesHaveThisSuffix将与ls -l完全相同。

那就是说,你可以做得更好:

shopt -s dotglob
for x in "$path/"*; do
    printf 'Processing file: %q\n' "$x"  
done

将因设置dotglob而找到所有隐藏文件,而根本不需要{.,}成语,并且还会一直忽略{{1 }和.

如果您的外壳是..ash

在Android设备上找到bash实际上很常见。如果您有一个基准POSIX shell,则以下内容将更加健壮。

mksh