在下面的代码中,在/ bin / sh中,为什么在满足第一个条件时评估-o的第二个条件。 场景是$ output有多个" ORA - "字符串在单独的行中,但它没有" INVALID_OBJECTS"串。所以第一部分是真的,但第二部分变成
"" -gt 0
以
失败sh:[:缺少`]'
if [ "`echo "$output" | grep ORA-`" -o "`echo "$output" | awk '/INVALID_OBJECTS/{getline;getline;print $0}' | sed 's/\s//g'`" -gt 0 ]; then
echo -e "\n*** ERROR: ***\n"
fi
更新: $ output保存pl-sql块的stdout。最终用户在执行pl-sql块期间输入了Ctrl + C,导致失去与SQL * Plus的连接。所以stdout最终得到了多个" ORA-nnnnn"错误。如果没有丢失连接,我会在$ output中得到以下行,在-o check的左侧检查。
INVALID_OBJECTS
_ _ _ _ _ _ _ _ _ _
3
答案 0 :(得分:0)
好吧,让我们先简化你的表达,删除不必要的引号。测试命令基本归结为:
[ `echo $output | grep ORA-` -o `echo $output | awk '/INVALID_OBJECTS/{getline;getline;print $0}' | sed 's/\s//g'` ]
所以-o
左边基本上有零个或多个单词(取决于grep的收益率),后面是{{1}右边的零个或一个单词(取决于awk的收益率) 1}}。
现在我不知道你想在这里实现什么,但你可以从这个分析中看出,你的命令没有意义。