如何在查询字符串KSH Linux中转义管道“|”字符?

问题描述 投票:0回答:1

我需要在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 ksh
1个回答
0
投票

我没有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构造。

© www.soinside.com 2019 - 2024. All rights reserved.