非常に長い文字列変数ですか?

非常に長い文字列変数ですか?

長いSQL文を書くのにもっと長い型変数がありますか?新しい行をどのように追加しますか? SQLプロンプトで実行できるように、長い変数テキストにステートメントを保存したいと思います。一般変数を使用すると、制限を超えると思います。ありがとう

    export DATABASE_LIST="/location/dblist.cfg"
    export SQL_INSERT_TEXT=""

    while read -r USERID ORACLE_SID2
    do

    ### how do I do this if too long?? and add new line
    SQL_INSERT_TEXT="${SQL_INSERT_TEXT} longgSqlStatements; \newline"

    done < <(tac $DATABASE_LIST)

    echo ${SQL_INSERT_TEXT}


    export sqllog = "/location/sqllog.log"
    $ORACLE_HOME/bin/sqlplus -S accnt_name@db_name << EOF >${sqllog}
    ${SQL_INSERT_TEXT}
    EOF

ベストアンサー1

Linux シェルには通常変数タイプはありません。文字列のみを使用すると、私のシステムでを実行して文字列の最大長を取得できます。getconf ARG_MAX最大文字列はおおよそ次のようになります。2M文字が長いです。

bash組み込み関数を使用して、printf -v次のような新しい行で変数を便利にロードしてみてください。

printf -v s "%s\n" hello there, this works "with quotes" too\.
echo "$s"

出力:

hello
there,
this
works
with quotes
too.

したがって、構文は次のようになります。

printf -v SQL_INSERT_TEXT '%s\n' "${SQL_INSERT_TEXT}" "longgSqlStatements;"

または、必要に応じて次のこともできます。

printf -v SQL_INSERT_TEXT '%s\n' "${SQL_INSERT_TEXT} longgSqlStatements;"

おすすめ記事