如何使文件名中的 space 成为 bash while 循环中的条件?

How to make a space in the filename the condition in a bash while loop?

这个有效:

while [ -f *" " ]

但事实并非如此:

while [ -f *" "* ] # edited per OPs comment

对不起,如果我问了一些愚蠢的问题。 我使用了搜索功能,但我所能找到的只是关于如何处理文件名中的空格的问题,而不是如何使其成为定位文件的条件。

如果 globbing 匹配多个文件,while [ -f *" " ]while [ -f *" "* ] 都不起作用。对于多个文件,测试条件变为:

[ -f file1 file2 ... ] 

无效。

例如,在 Bash:

2 个匹配项将抛出 预期的二元运算符 错误消息

超过 2 个匹配将抛出 参数过多 错误消息


你可能想要这个:

for file in ./*" "*;
do
  echo "$file"
done

或者,如果文件名中包含 space,您想要一个循环,那么:

while [[ "$filename" == *" "* ]];do
   echo filename conatins space
done

测试文件名是否匹配全局模式的标准方法是使用case:

for f in *; fo
    case "$f" in
        *' '*)
            printf 'file "%s" is spacing out\n' "$f"
            ;;
    esac
done