2

次のコードを実行すると、変数 department に格納されているデータ、testDate および testTime は、データにスペースがある場合、互いに混合されます。たとえば、「コンピュータ サイエンス」が部門名の場合、「コンピュータ」は変数 departmentに格納され、「科学」はtestDate変数に保存されますが、明らかに「コンピューターサイエンス」全体を変数に保存し、変数のデータも保存したいと思いますdepartment。また、出力で観察できる問題もあります。この問題を解決するにはどうすればよいですか?
testDatetestTime

mysql -uroot -proot -Dproject_ivr_db -rN --execute "SELECT Dpartment,TestDate,
TestTime FROM entrytests_datetime WHERE Discipline='msc'" |
while read department testDate testTime 
do

    echo "V,department=$department"
    echo "V,testDate=$testDate"
    echo "V,testTime=$testTime"

done

echo "E,resume"

出力:

  V,department=computer
  V,testDate=science
  V,testTime=first february 2013    nine thirty a m
  V,department=electronics
  V,testDate=first
  V,testTime=february 2013  ten thirty a m
  E,resume
4

1 に答える 1

1

基本的に、出力内のフィールドがmysqlスペース以外の文字で区切られていることを確認する必要があります。また、どの文字であるかをシェルに通知する必要があります。

シェルへの通知はIFS変数を使用して行われます。

mysqlコマンドの通知は、--batchまたは-Bオプションを使用して行われます。

--batch-B

タブを列区切り文字として使用して結果を印刷し、各行を新しい行に配置します。このオプションでmysqlは、履歴ファイルを使用しません。

バッチモードでは、非表形式の出力形式と特殊文字のエスケープが発生します。エスケープは、rawモードを使用して無効にすることができます。--rawオプションの説明を参照してください。

それで:

IFS="   "   # Tab (only) in quotes
mysql -B -uroot -proot -Dproject_ivr_db -rN --execute "SELECT Dpartment,TestDate,
TestTime FROM entrytests_datetime WHERE Discipline='msc'" |
while read department testDate testTime 
do

    echo "V,department=$department"
    echo "V,testDate=$testDate"
    echo "V,testTime=$testTime"

done

echo "E,resume"
于 2013-02-21T07:13:24.473 に答える