2

一定很容易。[编辑] 我正在编写一个 BASH 脚本,使用 HERE 文档将一些语句重定向到 SQL*Plus 命令提示符。

sqlplus -s user/pw@db > $TMPFILE <<EOF
    SET ECHO OFF;
    SET FEEDBACK OFF;
    SET HEADING OFF;
      select x
      from a_table
      where a_field like '%$1%';
    EXIT;
EOF

当然这不起作用,因为单引号内没有替换。那我该怎么做呢?我不能这样做, "'%$1%'" 因为双引号仍然作为 SQL*Plus 的输入并导致错误。谢谢你。

4

2 回答 2

3

它应该无需修改即可工作

我的简单测试有效:

 cat << HERE
 $BASHPID
 '$BASHPID'
 HERE

返回

 4608
 '4608'

这是因为

如果 word 没有被引用,则 here-document 的所有行都经过参数扩展、命令替换和算术扩展。在后一种情况下,字符序列\newline 被忽略,并且必须使用'\' 来引用字符'\'、'$' 和'`'。

于 2011-06-01T13:41:29.233 回答
1

你试过了吗?这个对我有用。检查确认此处文档的所有行都经过参数扩展的手册页。

这里文档的格式是:

   <<[-]word
           here-document
   delimiter

不对 word 执行参数扩展、命令替换、算术扩展或路径名扩展。如果 word 中的任何字符被引用,则分隔符是 word 上去除引号的结果,并且 here-document 中的行不展开。如果 word 没有被引用,则 here-document 的所有行都经过参数扩展、命令替换和算术扩展。在后一种情况下,字符序列 \ 被忽略,并且必须使用 \ 来引用字符 \、$ 和 `。

于 2011-06-01T13:45:00.563 回答