2012-03-06 33 views
3

我正在使用KornShell(ksh)中的脚本。我的数据库连接通过SQLPLUS连接到Oracle 9i数据库。除了将任何连续的空格自动截断为只有一个字符外,我还没有将DB值存入shell变量中有任何问题。如何在使用反引号时保留KornShell脚本中的空格?

这里是我的代码示例:

MY_VAR=`sqlplus -s usr/[email protected] << ! 
set heading off; 
set pagesize 0; 

select a_value from a_table where an_index = 25; 
!` 

在数据库中的实际数据是这样的:

Dec 15 09:19:10 <24:0070> User record (5 XATY  41839FG8 58775HK9AFF) is invalid for this condition 

我的代码上面的例子返回它是这样的:

Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition 

间距对于我正在处理的内容至关重要。

非常感谢您的帮助。

回答

5

首先,不要使用反引号,它们将根据1995年出版的'新Kornshell编程语言'弃用!相反,请使用易于嵌套版本的命令替换,$(yourCmd goes here)

您不向我们展示如何使用变量$ MY_VAR。如果说

echo $MY_VAR > outputFile 

您需要引用变量,即

print -- "$MY_VAR" > outputFile 

Print是回声KSH重大升级,但最好是有使用习惯“ - ”之间命令和你想要的字符串print。要打印的字符串中的任何' - '字符可能会引发未保护的(即不是' - '),print命令用于循环。

您可能还需要引用赋值给MY_VAR,即

MY_VAR="$(sqlplus -s usr/[email protected] <<-EOD 
set heading off; 
set pagesize 0; 

select a_value from a_table where an_index = 25; 
EOD 
)" 

我切换到EOD,作为! char被许多shell用于!$(前一行的最后一个单词)等符号,所以为什么会混淆事物。

未来的注意事项:有一个ksh的标签,您可以在此处使用StackOverflow。外壳是模糊的,可以意味着Windows cmd.com以及zsh。

我希望这会有所帮助。

+1

谢谢您的快速回答。我所需要做的就是在使用它时在变量周围加上双引号,它解决了我所有的问题。 – 2012-03-06 19:31:17

相关问题