我通常会写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