Phi*_*ton 3 unix shell scripting ksh sqlplus
我正在使用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;
!`
Run Code Online (Sandbox Code Playgroud)
数据库中的实际数据如下:
Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition
Run Code Online (Sandbox Code Playgroud)
我上面的代码示例返回如下:
Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition
Run Code Online (Sandbox Code Playgroud)
间距对我正在使用的内容至关重要.
预先感谢您的帮助.
首先,不要使用反引号,根据1995年出版的"新Kornshell编程语言",它们已被弃用!相反,使用易于嵌套的命令替换版本$( yourCmd goes here).
您没有告诉我们您如何使用变量$ MY_VAR.如果你说
echo $MY_VAR > outputFile
Run Code Online (Sandbox Code Playgroud)
你需要引用变量,即
print -- "$MY_VAR" > outputFile
Run Code Online (Sandbox Code Playgroud)
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
)"
Run Code Online (Sandbox Code Playgroud)
我已经切换到EOD了!很多shell都使用char作为符号!$(前一行的最后一个单词),所以为什么要混淆一些东西.
注意将来:您可以在StackOverflow上使用ksh的标记.Shell是不明确的,可能意味着Windows cmd.com以及zsh.
我希望这有帮助.