我正在使用KornShell(ksh)中的脚本。我的数据库连接是通过SQLPLUS连接到Oracle 9i数据库。我没有任何问题将DB值转换为shell变量,除了任何连续的空格被自动截断为只有一个字符。
以下是我的代码示例:
MY_VAR=`sqlplus -s usr/pass@db << !
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
间距对我正在使用的内容至关重要。
提前感谢您的帮助。
答案 0 :(得分:5)
首先,不要使用反引号,根据1995年出版的“新Kornshell编程语言”,它们已被弃用!相反,请使用易于嵌套的命令替换版本$( yourCmd goes here)
。
您没有告诉我们您如何使用变量$ MY_VAR。如果你说
echo $MY_VAR > outputFile
你需要引用变量,即
print -- "$MY_VAR" > outputFile
Print
是一个关于echo的ksh主要升级,但最好习惯在命令和你想要print
的字符串之间使用' - '。您要打印的字符串中的任何“ - ”字符都可以为循环抛出无人看守的(即没有“ - ”),print
命令。
您可能还需要将作业引用到MY_VAR,即
MY_VAR="$(sqlplus -s usr/pass@db <<-EOD
set heading off;
set pagesize 0;
select a_value from a_table where an_index = 25;
EOD
)"
我已经切换到EOD了!很多shell都使用char作为符号!$(前一行的最后一个单词),所以为什么要混淆。
注意将来:您可以在StackOverflow上使用ksh的标记。 Shell是不明确的,可能意味着Windows cmd.com以及zsh。
我希望这会有所帮助。