【发布时间】:2014-12-10 12:36:45
【问题描述】:
我正在循环中在 Bash 中构建一个字符串。循环处理的数据来自两个文件中的行,如下所示:
字符串的第一部分是文件 1 中的一行,如下所示:
SOME_PACKAGE
第二部分是文件 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
这个字符串然后被传递给 SQLPlus,并且 SQLPlus 应该像这样退出一个命令:
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*Plus没有那些引号?或者你们有什么其他的解决方案?
【问题讨论】:
-
听起来你的字段分隔符有问题。如果在嵌套的 while 循环中设置
IFS=会怎样? -
@arco444,真的,我问的问题是错误的,因为我忽略了一个非常重要的事实,我认为这根本不重要......让我更新这个问题。
-
@arco444 现在问题已经完成,但我认为
IFS可能是我的麻烦的答案...