2016-10-03 90 views
-1

我需要用sqlplus查询表和值赋给一个外壳variable.Currently一边做我得到issues.Code我正努力目前正在如何在将sqlplus输出分配给shell变量时跳过美元符号?

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

其中木$ MH是我的数据库密码。我我试图跳过带有转义字符的$符号,但仍然失败。 任何我可以解决这个问题的方式。 谢谢

+0

您的示例包含多个可疑结构以及至少一个语法错误。验证你发布的代码说明了你正在尝试解决的问题并且最好没有别的;另请参阅创建[mcve]的指南。 – tripleee

回答

0

不是很确定你正面临的确切问题,但我可以看到有一个转义字符的问题。既然你想让shell扩展密码变量($ mh),你不应该逃避$字符。在第一行的末尾

columnValue=`sqlplus -s username/[email protected]:port/servicename <<EOF 
set heading off; 
set scan on; 
select column1 from table where ID='$id'; 
EXIT; 
EOF` 
echo $columnValue 

如果“$ MH”是从字面上你的密码的一部分,那么我会认为“$值1”可能是一个问题:试试这个。

+0

尝试上述方法时出现同样的错误 - “ORA-01017:无效的用户名/密码;登录被拒绝SP2-0306:” – Sam

+0

columnValue = exec(sqlplus -s用户名/ muk $ mh @主机名:端口/服务名称<< EOF $ VALUE1 集标题关闭; 组扫描上;从表中选择 其中COLUMN1 ID = '$ ID'; EXIT; EOF) 回波$ columnValue ==>我需要试模此。 – Sam

0

单个反斜杠在反引号内不足以逃避字面美元符号。

无论如何,反引号语法已过时;你应该使用现代的语法,它也有更直接的引用规则。

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