0
while IFS=# read -r process_id source destination type
do
        echo "Process id: $process_id"
        echo "Source: $source"
        echo "Destination: $destination"
        case "$type" in
                2)
                echo "Type is outbound: $type"
                        contact=$(sqlplus -s ${SQLPLUS_INFO} <<EOF
                        SET PAGESIZE 0
                        SELECT email FROM table WHERE partner = '${destination}';
                        exit
                        EOF
                        )
                echo
                echo ${contact}
                echo
                ;;

根据上面的代码,如何将 $destination 中的值传递给查询?上面的示例不起作用,即使是其他示例:

SELECT email FROM table WHERE partner = '"${destination}"';
SELECT email FROM table WHERE partner = '$destination';
4

2 回答 2

3

当您使用 运行脚本时会发生什么bash -x?我问是因为这里的文档符号希望在一行的开头找到结束标记。当我运行此代码时:

#!/bin/bash

    contact=$(cat - <<EOF
    input from here document
    second line
    EOF
    )

echo "$contact"

我收到如下错误:

eof.sh: line 3: unexpected EOF while looking for matching `)'
eof.sh: line 10: syntax error: unexpected end of file

如果行以制表符开头,您可以在文件结束标记之前使用破折号来指示应该忽略前导制表符。

#!/bin/bash

        contact=$(cat - <<-EOF
        input from here document
        second line
        EOF
        )

echo "$contact"

这输出:

input from here document
second line

用空格替换这些选项卡,您又回到了语法错误中。虽然我已经bash用 .

所以,我怀疑你的问题与代码中此处文档的格式有关,但你应该看到某种错误,所以我有点困惑。你应该得到你想要的替换:

#!/bin/bash

description="The Description"

        contact=$(cat - <<-EOF
        input from here document
        second line with '$description' embedded.
        EOF
        )

echo "$contact"

这产生:

input from here document
second line with 'The Description' embedded.

使用bash -x有助于跟踪命令的执行。

所有这一切只是巧合地与 Oracle 和 SQL*Plus 相关。

于 2013-06-28T17:52:25.023 回答
0

请尝试删除变量周围的单引号:它们会阻止您的变量被解释(与双引号相反)。

那应该是:

SELECT email FROM table WHERE partner = ${destination};
于 2013-06-28T16:40:49.223 回答