[20190126]從sqlplus執行結果返回bash shell變數.txt

lfree發表於2019-01-26

[20190126]從sqlplus執行結果返回bash shell變數.txt


--//前幾天寫bash shell指令碼遇到的問題,自己以前忽略這個問題,透過例子說明。


$ cat d.sh

# this is a test


file_name=`sqlplus -S sys/a as sysdba <<EOF

set head off

select name c100  from v\\$dbfile where file#=11;

quit

EOF

`

echo 1111 $file_name 2222

echo "1111 $file_name 2222"


--//執行如下:

$ . d.sh

1111 D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF 2222

1111

D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF 2222


--//在除錯時遇到的問題,按照道理感覺2者的顯示應該一樣,實際上第2次執行(帶引號)的部分,明顯$file_name裡面含有1個回車。

--//有點不理解的地方是為什麼第1次執行可以在一行顯示。


--//改成如下,兩者就顯示一樣了:


# this is a test 


file_name=`sqlplus -S sys/a as sysdba <<EOF

set head off pagesize 0 feedback off verify off  echo off

select name c100  from v\\$dbfile where file#=11;

quit

EOF

echo 1111 $file_name 2222

echo "1111 $file_name 2222"


$ . d.sh

1111 D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF 2222

1111 D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF 2222


--//我看了以前的指令碼有一些都是第一種寫法的,居然沒有報錯。bash shell在處理變數值裡面帶有回車之類字元時

--//如果不使用引號引起來,刪除回車之類字元輸出,而帶引號原樣輸出。

--//可以透過如下例子說明:

$ a=$(cat d.sh)


$ echo $a

# this is a test file_name=`sqlplus -S sys/a as sysdba <<EOF set head off pagesize 0 feedback off...

--//變成一行。


$ echo "$a"

# this is a test


file_name=`sqlplus -S sys/a as sysdba <<EOF

set head off pagesize 0 feedback off verify off  echo off

select name c100  from v\\$dbfile where file#=11;

quit

EOF

`

echo 1111 $file_name 2222

echo "1111 $file_name 2222"




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2564926/,如需轉載,請註明出處,否則將追究法律責任。

相關文章