Bash在第一个空格后结束变量?

时间:2014-12-10 12:36:45

标签: bash sqlplus

我在循环中在Bash中构建一个字符串。循环处理的数据来自两个文件中的行,如下所示:

字符串的第一部分是文件1中的一行,如下所示:

SOME_PACKAGE

SECOND PART是文件2的一行,如下所示:

someFunction('some',parameters,here)

最终输出在两个字符串之间有一个点:

1 SOME_PACKAGE.someFunction('some',parameters,here)

1 在这里非常重要。一秒钟解释。

该字符串由双while循环

组成
while read line1 ; do
    while read line2 ; do
      stringArray=($line2)
      string=$line1.${stringArray[1]}

        sqlplus -s /nolog > /dev/null 2>&1  <<EOF
        connect user/password@db_instance
        variable rc refcursor;
        SPOOL ${line1}_${stringArray[0]}.DATA
        exec :rc := $string;
        print rc;
        spool off
        exit
        EOF

    done < file2.txt
done < file1.txt

然后将此字符串传递给SQL Plus,SQL Plus应该退出这样的命令:

SQL> variable rc refcursor;
SQL> exec :rc := SOME_PACKAGE.someFunction('some',parameters,here);
SQL> print rc;

直到现在,一切都运转良好。但是我在someFunction旁边有一个更复杂的参数。现在它看起来像这样:

SOME_PACKAGE.someFunction('some',parameters,here,'and 2 more',NULL)

传递给SQL * Plus的变量似乎在第一个空格结束......所以它看起来像:

SOME_PACKAGE.someFunction('some',parameters,here,'and

据我所知,我不应该在变量中传递空格,或者如果我想这样做,我应该将它们包装在引号中:""但是我应该在哪里放这些引号以将最终的变量传递给SQL *加上没有那些引号?或者你们提出的其他解决方案是什么?

1 个答案:

答案 0 :(得分:2)

由于@ arco444,答案很简单。

所有这一切发生的原因是内部字段分隔符,它被设置为默认值。

我做的是以下内容:

我已经改变了file2的外观

1 SOME_PACKAGE.someFunction('some',parameters,here,'and 2 more',NULL)

1§SOME_PACKAGE.someFunction('some',parameters,here,'and 2 more',NULL)

我在循环之前和之后添加了一些ILS更改,因此最终代码如下所示:

oldifs=$IFS
IFS="§"

while read line1 ; do
    while read line2 ; do
      stringArray=($line2)
      string=$line1.${stringArray[1]}

        sqlplus -s /nolog > /dev/null 2>&1  <<EOF
        connect user/password@db_instance
        variable rc refcursor;
        SPOOL ${line1}_${stringArray[0]}.DATA
        exec :rc := $string;
        print rc;
        spool off
        exit
        EOF

    done < file2.txt
done < file1.txt

IFS=$oldifs

现在一切都像魅力一样。