You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中if-then语法错误排查:统计每行单词数奇偶性失败

脚本错误修复与解释

你的脚本存在几处语法和逻辑错误,导致运行报错,以下是具体问题和修复方案:

错误点分析

  • 变量赋值错误:n= echo "$(echo $line | wc -w)" 写法不符合bash赋值规则,变量赋值时=前后不能有空格,且正确的命令替换赋值格式应为n=$(command)。
  • if条件语法问题:if[ n % 2 == 0 ]; then 存在多个问题:
    • if与[之间必须加空格,[和表达式开头也需要空格
    • 引用变量必须加$符号,即要用$n而非n
    • bash中数字比较需用-eq(相等),==是字符串比较语法;算术判断推荐用(( ... ))写法更直观简洁
  • 细节疏漏:read line未加-r选项会导致反斜杠被意外转义;输入文件参数$1未用双引号包裹,文件名含空格时会失效;开头条件判断的大括号属于多余写法。

修复后的脚本

#!/bin/bash
if [ $# -ne 1 ]; then
  echo "Wrong number of arguments!"
  exit 1
fi

while read -r line; do
  # 统计当前行单词数,双引号包裹$line避免空格分割异常
  n=$(echo "$line" | wc -w)
  # 双括号语法处理算术条件判断
  if (( n % 2 == 0 )); then
    echo "Is even"
  else
    echo "Is odd"
  fi
done < "$1"

额外优化说明

  • read -r line保留输入行中的反斜杠字符,避免不必要的转义
  • echo "$line"用双引号包裹,确保含空格的行被正确识别,单词数统计更准确
  • done < "$1"用双引号包裹文件名参数,适配带空格的文件名场景

内容的提问来源于stack exchange,提问作者Severjan Lici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:35:49