5

以下のスクリプトは、一連の csv ファイルを mysql db にロードしています。ループ内でこの関数を実行しようとしていますが、return と呼ばれる mysql テーブル フィールドにより、スクリプトは関数 return を実行する必要があると判断されます。

` 前後の戻り値は、mysql のキーワードである mysql 用にエスケープすることです。

for f in *.txt; 
do 
 mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (`return`,`id`,`field1`,`field2`);"; 
done
4

3 に答える 3

4

これはバッククォート文字を使用する mysql のばかげた引用規則です。代わりに単一引用符を使用できます''return'?

バックティックは「シェル内のこの現在のコマンドでコマンド置換を実行する」ことを意味するため、コマンドを実行しようとしていますreturn

使用できない場合は'return'、次のようにすべてのバッククォートをエスケープできます

\`return\`

IHTH

于 2012-12-21T20:05:10.343 に答える
3

これは、` ` で囲まれた文字列が bash によって実行されるために発生します。

これを試して:

echo '` date `' # this output the string ` date `
echo "` date `" # this output current time

$fただし、変数に慣れる必要があるため、二重引用符を単一引用符で変更することはできません。でバッククォートをエスケープします\

于 2012-12-21T20:04:26.033 に答える
2

バッククォートをエスケープするだけです:

 mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (\`return\`,\`id\`,\`field1\`,\`field2\`);"; 
于 2012-12-21T20:05:49.563 に答える