【问题标题】:wc -l giving integer expression expected errorwc -l 给出整数表达式预期错误
【发布时间】:2022-01-17 22:53:22
【问题描述】:

我知道输出未被识别为整数,但我不明白为什么?该文件超过 5 行。

$ if [ "$(wc -l test.txt)" -gt "$5" ]; then
            echo changes found;
           else
            echo  No changes found;
           fi

bash: [: 6 test.xml: integer expression expected
No changes found

【问题讨论】:

  • 我猜想$5,第五个命令行参数,计算结果为空字符串,从而混淆了测试
  • ...或另一个非整数。
  • 只需使用$(wc -l <test.txt) 即可避免打印文件名!
  • 错误消息将比较的左侧引用为字符串6 test.xmlwc 调用的输出;假设您打算在示例代码),因此错误消息的其余部分 integer expression expected(即,6 test.xml 不是整数)

标签: bash


【解决方案1】:

我刚试过这个:

wc -l test.txt

结果如下:

5 test.txt

所以结果包含一个数字,后跟文件名。

你可以这样解决:

wc -l test.txt | awk '{print $1}'

这只是给出数字。

因此,您可以将代码更改为:

$ if [ "$(wc -l test.txt  | awk '{print $1}')" -gt "$5" ]; then

...现在是正确的:

$ if [ $(wc -l test.txt  | awk '{print $1}') -gt 5 ]; then

【讨论】:

  • wc -l < test.txt 也可以。 wc 不打印文件名,如果它是标准输入。
  • 这一切都很好,直到它进入 if 循环。 $ if [ "$(wc -l test.txt | awk '{print $1}')" -gt "$5" ];然后回显 Y;否则回显X; fi bash: [: : 整数表达式预期 X $ wc -l test.txt | awk '{print $1}' 6
  • @Oxycash:我删除了双引号并将$5(第五个参数)替换为5(第五个参数)。现在好些了吗?
  • @Dominique 终于做到了!
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2011-12-25
相关资源
最近更新 更多