【问题标题】:Bash script syntax error: operand expected (error token is "=")Bash 脚本语法错误:预期操作数(错误标记为“=”)
【发布时间】:2017-04-12 14:59:04
【问题描述】:

我需要做的是将一个长文本文件切成 10 行相同的行数。因此,我编写了以下脚本。

#!/usr/bin/bash
filename="$1"
count=0
file=0
br=$(wc -l $filename | awk '{print $1}')
let br = $br/10
while read -r line
do
let count = count + 1
    name="$line"
echo $name >> file$file.csv
if [ $count = $br ];then
let count=0
let file+=1
fi
done < "$filename"

脚本产生以下我不理解的错误

cut.sh: line 9: let: =: syntax error: operand expected (error token is "=")

我已阅读similar topic,但仍然找不到解决方案。 欢迎任何想法。谢谢

【问题讨论】:

  • 只需在 shellcheck.net 上复制/粘贴您的脚本并修复所有语法错误。

标签: bash syntax


【解决方案1】:

bash 变量赋值不能在= 周围有空格。去掉=周围的空格:

let br=${br}/10

对所有此类情况执行相同操作。

【讨论】:

  • 很好。顺便说一句,您知道为什么结果会在第一个和最后一个输出文件中产生不同的行数吗?
  • @JürgenK。您没有提供足够的数据让我得出结论。
  • 在我的例子中,第一个文件包含 95k 行。接下来的 9 个文件大约 16 k,最后一个文件只有 5 行。我不明白为什么第一个文件那么大。而输入文件是 164k 行。
【解决方案2】:

bash 中的数学计算需要用双括号括起来,所以:

let count=$(( $count + 1 ))

【讨论】:

  • let 将其参数评估为算术扩展,您不需要 $(( )) 使用它。 let count=count+1count=$((count+1)) 都可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多