我需要在sqlplus中执行此查询:
q="
SELECT count(*) cnt FROM all_tables WHERE UPPER(OWNER||'.'||TABLE_NAME)=UPPER('$tab_')"
但管道“|”在KSH中得到解释:
echo $q
SELECT count(*) cnt FROM all_tables WHERE UPPER(OWNER '.' TABLE_NAME)=UPPER('STGDATA.T_DEL_RW_FIFO_PL_HIS_SC')
如何逃避它们以便可以在sqlplus中执行查询?
我没有linux测试,但在openbsd ksh它不会让它消失
$ ./escape.sh
/bin/ksh -> SELECT count(*) cnt FROM all_tables WHERE UPPER(OWNER||'.'||TABLE_NAME)=UPPER('')
$ cat escape.sh
#!/bin/sh
q="SELECT count(*) cnt FROM all_tables WHERE UPPER(OWNER||'.'||TABLE_NAME)=UPPER('$tab_')"
echo $SHELL "->" $q
但尝试正常的反斜杠逃脱
$ echo \|\|
||
如果你有什么是多行字符串(因为我看到“和SELECT之间的换行符我会建议使用cat << EOF构造。