2

そのようなスクリプトを持っている:

#! /bin/bash

typeset -i i END
let END=500 i=1
remainder=1
accum="use yola_test;\n"
for ((i=1;i<=END;++i)); do 
#   str1=$( echo "$i" | md5sum | md5sum )
    title="title_$i"
#   "${str1:2:20}"
    accum="${accum}CALL add_new_enterprise(\"$title\");\n"
    let "remainder=$i % 100"
    if [ $remainder -eq 0 ]; then
        accum="${accum}SELECT count(*) as \`enterprises:\` FROM enterprise;\n"
        mysql --host=l --port=0 --user=r --password='!' --execute="$accum" 
        accum="use yola_test;\n"
    fi
done

しかし、\ nごとに、「ポケットベルをstdoutに設定」が表示されます。これを回避できますか。エコーするときは、-eオプションを使用する必要がありますが、ANSI-Cの引用に関する資料を読んでいますが、使用方法の例はどこにもありません。それ。

私はそうしようとしました

mysql --host=l --port=0 --user=r --password='!' --execute="$( echo -e "$accum" )"

しかし、それは効果がなく、エコーの呼び出しは実行時間を増やすと思います。

4

2 に答える 2

3

@pglの答えはこの場合の最良のアプローチですが、実際に改行を変数値に埋め込む必要がある場合、最も簡単な方法はbashの$'...'引用形式を使用することです。

accum=$'use yola_test;\n'
...
accum="${accum}CALL add_new_enterprise(\"$title\");"$'\n'
...etc

上記の2番目の例では、引用符の種類を組み合わせて使用​​していることに注意してください。変数の補間を可能にするために最初の部分を二重引用符で囲み、次に$'...'エスケープシーケンスの解釈が必要な部分を二重引用符で囲みます。

ところで、別のアプローチは、改行を保持する変数を定義することです。

nl=$'\n'
accum="use yola_test;${nl}"
...
accum="${accum}CALL add_new_enterprise(\"$title\");${nl}"
...etc
于 2011-11-08T20:38:58.087 に答える
2

「pagersettostdout」は、MySQLからのものです。表示を停止するには、コードから\nのインスタンスを削除するだけです。あなたはそれらを必要としません。

于 2011-11-08T15:24:10.197 に答える