很长的字符串变量?

很长的字符串变量?

是否有更长的类型变量来构建冗长的 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 shell 通常没有任何变量类型。只有字符串,可以通过运行获得字符串的最大长度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;"

相关内容