为什么我会收到二元运算符预期错误
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
选项来处理这种边缘情况。
我正在尝试编写 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
选项来处理这种边缘情况。