如何使文件名中的 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
这个有效:
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