我正在尝试分配输出
从 v$asm_diskgroup 中选择名称;
到 Shell 中的变量。由于表名中存在特殊字符“$”,脚本失败。
注意:当我尝试分配“select sysdate from Dual”的值时,它的工作方式就像魅力一样。
任何帮助,将不胜感激。
有效的查询:
count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
select sysdate from dual;
exit;
END
)
echo $count
我遇到问题的查询:
count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
select name from v$asm_diskgroup
exit;
END
)
echo $count
答案1
您需要将带有 $ 的字符串放在单引号中:
value=$(... 'select name from v$asm_diskgroup;')
否则,shell 将尝试扩展名为 asm_diskgroup 的变量。 shell 不会扩展单引号内的变量。
答案2
我找到了一个简单的解决方法:
而不是使用
v$asm_diskgroup
我已将它分配给一个变量
tab='v$asm_diskgroup'
count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
select name from $tab;
exit;
END
)
echo $count