如何将SQLPlus的结果存储到shell变量中

sar*_*ego 8 unix shell sqlplus

我的要求是将sqlplus操作的结果存储到我的shell脚本中的变量中.我需要在我的.sh文件中执行以下操作的结果

sqlplus 'user/pwd' @test.sql
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了

testvar = 'sqlplus 'user/pwd'
@test.sql'
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

编辑::

我改成了

testvar=sqlplus foo/bar@SCHM @test.sql
Run Code Online (Sandbox Code Playgroud)

它说

SQL*Plus:: not found [No such file or directory]

我试过了

testvar=$(sqlplus foo/bar@SCHM
@test.sql)
Run Code Online (Sandbox Code Playgroud)

它给出了同样的错误.当我尝试没有像下面的变量赋值

sqlplus foo/bar@schm @test.sql
Run Code Online (Sandbox Code Playgroud)

它工作正常

Mic*_*ent 19

试试这个:

testvar=`sqlplus -s foo/bar@SCHM <<EOF
set pages 0
set head off
set feed off
@test.sql
exit
EOF`
Run Code Online (Sandbox Code Playgroud)

-s开关将在sqlplus启动时关闭所有标题信息.你还想关闭反馈,标题和页面大小为0.我老了,所以我仍然使用后面的滴答:)


Jé *_*eue 10

使用反引号:

testvar=`sqlplus foo/bar @test.sql`
Run Code Online (Sandbox Code Playgroud)

或者应该是语法上的眼睛:

testvar=$(sqlplus foo/bar @test.sql)
Run Code Online (Sandbox Code Playgroud)

你清楚地知道采用正确的sql*plus命令来限制多余的输出,是吗?:)当然要注意反引信将折叠输出的空白.

  • "反击会破坏输出的空白" - 它不会.它只会删除尾随的换行符.而且,使用`$()`并没有什么老套的,而是反过来. (2认同)
  • 反过来说:反叛是"老派".在分配时,空格不会丢失.如果未引用变量,它将在输出中丢失. (2认同)