如何在将sqlplus输出分配给shell变量时跳过美元符号?

时间:2016-10-03 05:05:29

标签: bash

我需要使用sqlplus查询表并将值分配给shell变量。当前我正在进行的问题。我目前正在尝试的问题是

columnValue=`sqlplus -s username/muk\$mh@hostname:port/servicename  <<EOF $value1
set heading off;
set scan on;
select column1 from table where ID='$id';
EXIT;
EOF`
echo $columnValue

其中muk $ mh是我的db密码。我试图跳过带有转义字符的$符号但仍然失败。 我能以任何方式解决这个问题。 感谢

2 个答案:

答案 0 :(得分:0)

不确定您遇到的确切问题,但我可以看到转义字符存在问题。由于您希望shell扩展密码变量($ mh),因此您不应该转义$字符。试试这个:

columnValue=`sqlplus -s username/muk$mh@hostname:port/servicename  <<EOF
set heading off;
set scan on;
select column1 from table where ID='$id';
EXIT;
EOF`
echo $columnValue

如果&#39; $ mh&#39;确切地说是你密码的一部分,然后我会认为&#34; $ value1&#34;在第一行末尾可能是个问题。

答案 1 :(得分:0)

单个反斜杠在反叛内部是不够的,以逃避一个字面的美元符号。

无论如何,反引号语法已经过时了;你应该使用现代$(command substitution)语法,它也有更简单的引用规则。

bash$ var=`echo moo\$bar`
bash$ echo "$var"
moo
bash$ var=$(echo moo\$bar)
bash$ echo "$var"
moo$bar