使用[:行获取输出:未知运算符

时间:2019-04-24 09:47:37

标签: shell

如果条件外壳程序脚本的这段代码是我的,对于正确的情况它可以正常工作,对于错误的情况,输出虽然是但得到[:行:未知运算符

ut=$(echo -ne "set heading OFF\n select user_type from usertype where acm_login = '$acmlogin';" | sqlplus -s ${ORA_UID_PSWD})
        if [ $ut != "no rows selected" ]
        then
                print "Usertype of an user $acmlogin is $ut\n"
                print "press <cr> to continue > \c"
        else
                print "Usertype not defined\n"
                print "press <cr> to continue > \c"
        fi

我正在得到其他类似下面的部分的输出

usertype[867]: [: rows: unknown operator
Usertype not defined

1 个答案:

答案 0 :(得分:1)

为便于说明,我们假设 ut 变量的值为

ut = '2 rows selected'

在评估过程中,$ ut会在没有双引号的情况下进行扩展,因此它等效于:

if [ $ut != "no rows selected" ]

      # is being treated by bash shell as

if [ 2 rows selected != "no rows selected" ]

因此,bash在这里看到多个参数。它认为第一个参数是2,并且期望第二个参数是运算符,因此它抱怨不是运算符

一种简单的解决方案是将$ ut放在双引号中。因此,这将解决问题:

if [ "$ut" != "no rows selected" ]