在bash中,函数内部的Heredoc返回语法错误

尼古拉斯·德·丰特奈

我有以下功能:

#!/bin/bash

get_instance{
dbname=$(sqlplus -s / as sysdba<<EOF
set pages 0
set feedback off
select name from v\$database;
exit;
EOF)

echo $dbname

}

get_instance

它似乎有效。在错误消息的中间,我得到了我的信息dbname,但仍然返回语法错误。

 oracle@testdb01:db01:/home/oracle/
 > ./test.sh
 ./test.sh: line 3: get_instance{: command not found
 DB01
 ./test.sh: line 11: syntax error near unexpected token `}'
 ./test.sh: line 11: `}'

如果我完全删除了函数调用,我得到的结果没有错误:

dbname=$(sqlplus -s / as sysdba<<EOF
set pages 0
set feedback off
select name from v\$database;
exit;
EOF)
echo $dbname

oracle@testdb01:db01:/home/oracle
> ./test.sh
DB01

我需要做什么才能使其在功能中正常工作?

编辑:

建议将括号放在EOF标签之后并添加function关键字:

 > vi test.sh
 "test.sh" 12 lines, 160 characters

#!/bin/bash
# updated file
function get_instance{
dbname=$(sqlplus -s / as sysdba<<EOF
set pages 0
set feedback off
select name from v\$database;
exit;
EOF
)
echo $dbname
}

get_instance

oracle@testdb01:db01:/home/oracle
> ./test.sh
./test.sh: line 10: syntax error near unexpected token `dbname=$(sqlplus -s / as sysdba<<EOF
set pages 0
set feedback off
select name from v\$database;
exit;
EOF
)'

./test.sh:第10行:')'

格伦·杰克曼

您的函数声明有误:

get_instance{

应该是其中之一

function get_instance {
get_instance() {

将右括号放在另一行上:

dbname=$(sqlplus -s / as sysdba<<EOF
...
EOF
)

Heredoc的终止词应该是该行上的唯一字符(使用时的制表符除外<<-)。演示:

$ x=$(cat <<END
> one
> two
> END)
bash: warning: here-document at line 5 delimited by end-of-file (wanted `END')
$ echo "$x"
one
two

因此,它偶然地起作用了。更好的做法是:

$ y=$(cat <<END
> 1
> 2
> END
> )
$ echo "$y"
1
2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

箭头函数返回的对象中的“意外令牌”语法错误

来自分类Dev

语法错误函数返回值

来自分类Dev

Ubuntu bash函数..语法错误:“(”或“}”意外

来自分类Dev

bash语法错误(“ <”中的令牌错误)

来自分类Dev

bashrc 中的别名返回语法错误

来自分类Dev

返回语法错误

来自分类Dev

OSX中的bash语法错误

来自分类Dev

bash中if [“ $ foo” ==“ bar”]的语法错误

来自分类Dev

函数中的OCaml语法错误

来自分类Dev

函数中if语句的Postgresql语法错误

来自分类Dev

我函数中的Haskell语法错误

来自分类Dev

函数中的声明语法错误

来自分类Dev

递归函数中的OCaml语法错误

来自分类Dev

SQL创建函数中的语法错误

来自分类Dev

我的函数中的Haskell语法错误

来自分类Dev

函数中的Postgres语法错误

来自分类Dev

PHP中的函数语法错误

来自分类Dev

函数中的声明语法错误

来自分类Dev

嵌套函数中的Ocaml语法错误

来自分类Dev

Bash语法错误

来自分类Dev

Bash语法错误

来自分类Dev

子查询中的多个json_object_agg函数返回语法错误

来自分类Dev

子查询中的多个json_object_agg函数返回语法错误

来自分类Dev

Bash中Heredoc的输入语法

来自分类Dev

Bash中Heredoc的输入语法

来自分类Dev

创建返回JSON Postgresql的函数时的语法错误

来自分类Dev

函数调用返回MySQL语法错误1064

来自分类Dev

Python返回外部函数语法错误

来自分类Dev

试图使bash函数减小角度的语法错误