2017-07-07 10 views
1

問題があり、原因がわからない。私はBashスクリプトで予期せずMySQLクエリが分割される

#!/bin/bash 

mysql --login-path=main-data -e "SELECT 
    cid, 
    order_id, 
    TxRefNum 
FROM database.orders_temp" | 

while read this that other; do 

    echo "$this || $that || $other" 
done 

I(で起動する他のコードは、文字通りありません)私のbashスクリプトで簡単な呼び出しを行っています

______________________________________________ 
| cid | order_id | TxRefNum | 
---------------------------------------------- 

は、私は、これらの3つのフィールドを持つテーブルを持っています

__________________________________________________________ 
| 29 | F0VIc - CHATEAU ROOFIN | 5555555 | 
---------------------------------------------------------- 

代わりに私のスクリプトは文字列を分割しています二つの異なる文字列にが..エコーが実際にある:

___________________________________________________ 
| 29 | F0VIc | - CHATEAU ROOFIN | 
--------------------------------------------------- 

は、私は私のwhileループで私の変数を設定するときの区切り文字を設定する必要がありますか?私は本当に困っている!!

+0

あなたのデータは区切り文字が含まれる可能性がありますトペでIFSラインで同様のクエリで|に注意しましょう。すばやくテストするには、スペースをアンダースコアに置き換えるクエリに置換を追加する方法があります。また、アドバイスの素早い言葉:パラメータ/変数としてキーワード/予約語を使用しないでください: 'this'はパラメータの最も手の込んだ名前ではありません。 –

+0

LOL私は「これ」を意味する(何も意図していない) - それらは明らかに私の「本当の」変数名ではない;-) – Zak

答えて

1

Getting output from the mysql command formatted in an intelligent way is problematic。あなたの場合、bashは区切り文字としてを解釈しています。別の方法で分割する必要があります。私はこれを得ることができました。あなたは

#!/bin/bash 

IFS='|' # set the delimiter 
mysql --login-path=main-data -e "SELECT 
    29 as cid, '|', 
    'F0VIc - CHATEAU ROOFIN' as order_id, 
    '|', 
    5555555 as TxRefNum 
FROM dual" | 
while read this that other; do 
    echo "$this || $that || $other" 
done 
+0

すばらしい説明ありがとう! – Zak

関連する問題