下面的脚本抛出错误:
#!/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
无效,导致错误消息。
只需将文件名传递给wc
via 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)