2012-12-21 11 views
5

以下のスクリプトは、csvファイルの束をmysql dbにロードしています。私はループ内でこの関数を実行しようとしていますが、returnというmysqlテーブルフィールドはスクリプトに関数の戻り値を実行させるべきだと考えるようにしています。bashスクリプトで "return"関数をエスケープするには

`around aroundは、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

これは、バックティック文字を使用するmysqlの愚かな引用規約です。あなたは代わりに一重引用符を使用できますか?'、つまり'return'

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

あなたが'return'を使用することができないならば、あなたは

\`return\` 

ようIHTH

+2

一重引用符は、列名を文字列に変換します。 –

+0

私はbackticksをエスケープし、期待どおりに動作します、ありがとう! – zer0bit

3

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

これを試してみてください:

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

しかし、あなたが変数でsostitudedされる$fを必要とするので、あなたは、単一のもので、二重引用符を変更することはできません。だから\でバックスティックをエスケープしてください。

+0

あなたは二重引用符を使用する必要があります区切られた識別子を取得するために、あなたは?確かに単引用符が意味する文字列値ではありません。 –

2

は、単にあなたのバッククォートをエスケープ、バッククォートのすべてを逃れることができます。

mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (\`return\`,\`id\`,\`field1\`,\`field2\`);"; 
関連する問題