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説明しましたが、Korn シェルと Bourne シェルでも同じ問題に遭遇すると思います。

したがって、あなたの問題はコード内のヒアドキュメントの書式設定に関連していると思われますが、何らかのエラーが表示されているはずなので、少し困惑しています. 必要な置換を取得する必要があります。

#!/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 に答える