使用“-ge”进行 Bash 测试 wc - 除以 0 错误

pen*_*uin 6 bash shell-script

下面的脚本抛出错误:

#!/bin/bash  
if [[ $(wc -l "/disk1/environment.sh") -ge 0 ]];then  
   echo "File has data"  
fi
Run Code Online (Sandbox Code Playgroud)

line 2: [[: 5 /disk1/environment.sh: division by 0 (error token is "/environment.sh")

但下面的代码工作正常:

#!/bin/bash  
  if [[ $(wc -l "/disk1/environment.sh") > 0 ]];then  
    echo "File has data"  
  fi
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么'-ge'和'>'在这里表现不同吗?
bash 版本:GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

hee*_*ayl 10

那是因为来自 的输出wc -l /filename,这将输出例如:

5 /filename
Run Code Online (Sandbox Code Playgroud)

但您正在进行整数比较(运算符-ge:),因此无关部分/filename无效,导致错误消息。

只需将文件名传递给wcvia STDINwc即可返回计数:

[[ $(wc -l </disk1/environment.sh) -ge 0 ]]
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,[[ $(wc -l /disk1/environment.sh) > 0 ]],您只是检查命令替换的输出 , , $(wc -l /disk1/environment.sh), 按0字典顺序排序在 之后;除非wc返回一些错误并且在 STDOUT 上不产生任何内容,否则情况总是如此。

请注意,[[不支持算术运算符,如>, >=, <, <=,您需要这些((关键字:

(( $(wc -l </disk1/environment.sh) > 0 ))
Run Code Online (Sandbox Code Playgroud)