这两行
function some {
## myFunc(true) is just a pattern
local isEnabled="grep myFunc(true) $indexFile | grep true"
if [ -z $($isEnabled) ]; then ... fi
}
给我: binary operator expected
但当我删除管道符号|
时,它是如何工作的,如何使用管道执行命令?我正在使用sh
答案 0 :(得分:1)
您收到该错误是因为$($isEnabled)
正在扩展为空,[ -z ]
需要参数。
myFunc(true)
放入单引号或双引号,因为()
具有特殊含义$indexFile
括在双引号中以防止出现同样的问题您可以重写sh
的代码:
function some {
local isEnabled=$(grep 'myFunc(true)' "$indexFile" | grep true)
if [ -z "$isEnabled" ]; then
: your logic here
fi
}
或者,更直接地说:
function some {
# just interested in the presence or absence of a pattern
# irrespective of the matching line(s)
if grep 'myFunc(true)' "$indexFile" | grep -q true; then
: your logic here
fi
}
或者,在Bash中使用[[ ]]
:
function some {
local isEnabled=$(grep 'myFunc(true)' "$indexFile" | grep true)
if [[ $isEnabled ]]; then
: your logic here
fi
}
[[ $var ]]
与[[ -z $var ]]
或[[ -n $var ]]
一样好。只要$var
的长度大于>它就会评估为真。 0
无需将[[ ]]
中的变量括在引号中--Bash处理扩展而不会出现任何分词或通配符扩展问题。