为什么我会收到二元运算符预期错误

Why am i getting the binary operator expected error

我正在尝试编写 shell 脚本以使用 if 语句检查是否存在以 .txt 结尾的文件。

在单括号条件中,所有 Shell Expansions 都会发生,特别是在这种情况下文件名扩展。

条件构造作用于给定的 数量 个参数:-f 期望后面只有一个参数,一个文件名。显然你的 *.txt 模式匹配不止一个文件。

如果你的shell是bash,你可以

files=(*.txt)
if (( ${#files[@]} > 0 )); then ...

或者更方便地说:

count=0
for file in *.txt; do 
  count=1
  break
done
if [ "$count" -eq 0 ]; then
  echo "no *.txt files"
else
  echo "at least one *.txt file"
fi

我终于明白你的观点了。我一直在给你一些不完整的建议。这就是您所需要的:

for f in *.txt; do
  if [ -f "$f" ]; then
    do_something_with "$f"
  fi
done

原因:如果没有匹配模式的文件,那么shell 将模式保留为纯字符串 .在循环的第一次迭代中,我们有 f="*.txt"mv 响应“找不到文件”。

我习惯于在 bash 中使用 nullglob 选项来处理这种边缘情况。