2012-03-06 58 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

相關問題