2016-10-03 70 views
-1

我需要用sqlplus查詢表和值賦給一個外殼variable.Currently一邊做我得到issues.Code我正努力目前正在如何在將sqlplus輸出分配給shell變量時跳過美元符號?

columnValue=`sqlplus -s username/muk\[email protected]:port/servicename <<EOF $value1 
set heading off; 
set scan on; 
select column1 from table where ID='$id'; 
EXIT; 
EOF` 
echo $columnValue 

其中木$ MH是我的數據庫密碼。我我試圖跳過帶有轉義字符的$符號,但仍然失敗。 任何我可以解決這個問題的方式。 謝謝

+0

您的示例包含多個可疑結構以及至少一個語法錯誤。驗證你發佈的代碼說明了你正在嘗試解決的問題並且最好沒有別的;另請參閱創建[mcve]的指南。 – tripleee

回答

0

不是很確定你正面臨的確切問題,但我可以看到有一個轉義字符的問題。既然你想讓shell擴展密碼變量($ mh),你不應該逃避$字符。在第一行的末尾

columnValue=`sqlplus -s username/[email protected]:port/servicename <<EOF 
set heading off; 
set scan on; 
select column1 from table where ID='$id'; 
EXIT; 
EOF` 
echo $columnValue 

如果「$ MH」是從字面上你的密碼的一部分,那麼我會認爲「$值1」可能是一個問題:試試這個。

+0

嘗試上述方法時出現同樣的錯誤 - 「ORA-01017:無效的用戶名/密碼;登錄被拒絕SP2-0306:」 – Sam

+0

columnValue = exec(sqlplus -s用戶名/ muk $ mh @主機名:端口/服務名稱<< EOF $ VALUE1 集標題關閉; 組掃描上;從表中選擇 其中COLUMN1 ID = '$ ID'; EXIT; EOF) 回波$ columnValue ==>我需要試模此。 – Sam

0

單個反斜槓在反引號內不足以逃避字面美元符號。

無論如何,反引號語法已過時;你應該使用現代的語法,它也有更直接的引用規則。

bash$ var=`echo moo\$bar` 
bash$ echo "$var" 
moo 
bash$ var=$(echo moo\$bar) 
bash$ echo "$var" 
moo$bar 
相關問題