2017-09-07 6 views
0
を実行した後に脱出し

のMySQLのフィールド「Fparam_list」は:なぜバックスラッシュは、MySQLコマンド

{"fsql":"select distinct(Fuid) from dp_snap.rc_order_db_t_rc_order where Frc_order_state=20 and Fbu_type = 40 and Fapproval_code like \"%D%\" and Fapproval_code <> \"[\\\"D98\\\"]\" and SUBSTR(Fmodify_time,1,10) >= date_add(now(),-7) and SUBSTR(Fmodify_time,1,10) <= date_add(now(),-0)"} 

は、それから私は、MySQLのコマンドを使用して、このフィールドを取得したい、私のシェルスクリプトは次のとおりです。

#!/bin/bash 

sql_str="select Fparam_list from data_platform_db.t_extraction_task_info t where Ftask_id = '64842'" 
param_list=$(/usr/bin/mysql -h127.0.0.1 -P10000 -uroot -p1234 --default-character-set=utf8 -N -e "$sql_str") 
echo $param_list 

後私は、このシェルスクリプトを実行し、その結果は次のとおりです。

~/tmp/yw_home/lab$ sh test_mysql.sh 
{"fsql":"select distinct(Fuid) from dp_snap.rc_order_db_t_rc_order where Frc_order_state=20 and Fbu_type = 40 and Fapproval_code like \\"%D%\\" and Fapproval_code <> \\"[\\\\\\"D98\\\\\\"]\\" and SUBSTR(Fmodify_time,1,10) >= date_add(now(),-7) and SUBSTR(Fmodify_time,1,10) <= date_add(now(),-0)"} 

それは私が混乱になり、バックスラッシュがステートメ後にエスケープされている理由MySQLコマンドを実行しますか?

+0

2つのバックスラッシュを1つのバックスラッシュに置き換えるためにsedの/ \\\\/\\/gを使用する一時的な解決策ですが、良い解決策ではないようです... – ouyangyewei

+0

データをパイプしたり、おそらく二重にエスケープしなければならない '-e'アプローチよりも面倒ではありません。 – tadman

答えて

1

mysqlクライアントは、特殊文字をエスケープして、簡単に識別できるようにします。この動作を無効にするには、--rawオプションを使用してください。

+0

それは動作します、ありがとう! – ouyangyewei

関連する問題