我通常會寫SQL
語句內嵌在Bash shell腳本SQLPlus
要執行原樣「設置-o noglob」在bash shell腳本
#! /bin/sh
sqlplus user/[email protected]<<EOF
insert into dummy1
select * from dummy2;
commit;
exit;
EOF
這會工作得很好,並插入幾行dummy1
執行時。我的一個同事來找我一天用一個腳本像下面(簡化)
#! /bin/sh
sqlvar="insert into dummy1 select * from dummy2;commit;"
echo $sqlvar|sqlplus user/[email protected]
與此問題是,當執行變量sqlvar
擴展*
是在當前目錄下的所有文件,並最終錯誤出喜歡 -
SQL> insert into dummy1 select <--all the file names in the current directory-->
from dummy2;commit
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
我們就這一個被殼正在演繹一個通配符背景*
並列出所有的文件名,而shell變量擴展(不明白爲什麼....第一立足??? )。因此,爲了理解這一點,我們不喜歡的東西如下─
$ var="hello *"
$ echo $var
hello <--all the file names in the current directory-->
但
$*
ksh: somefile.sh: 0403-006 Execute permission denied. #since it had no execute permission
有一些目錄中的其他文件,我不知道爲什麼*
選擇執行somefile.sh
或指向somefile.sh
。
後,有點挖我們意識到,使用set -o noglob
將完全解決這個問題,喜歡 -
#! /bin/sh
set -o noglob
sqlvar="insert into dummy1 select * from dummy2;\n commit;"
echo $sqlvar|sqlplus user/[email protected]
有set
婷noglob
的一些衝突或相當矛盾的描述,在互聯網上。所以我在尋找是否有人能夠解釋這一點的小訣竅。
感謝,但我們正在尋找設置'noglob'的意義(這顯然也解決了問題)。新的字符不會在那裏,我的錯誤修復了這個問題。 – Annjawn