BASH:从MySQL获取数据,其中记录有空格

时间:2014-04-30 17:09:33

标签: mysql bash

我试图从MySQL数据库中获取值,以便稍后用perl替换,一切正常但是如果记录包含空格" "变量将被设置不正确。

如果我在数据库中有以下示例:

  • sede =" street"
  • fede =" calvin and hobbes"
  • lede =" 12"

变量的结果将是:

  • $ TAGSEDE =" steet"
  • $ TAGFEDE =" calvin"
  • $ TAGLEDE ="和"

我知道设置$ DBDATAF有什么问题,但我无法识别它(英语不是我的母语所以有些误解不仅仅是一种可能性)。

DBDATAF=$(mysql -u$DBUSER -p$DBPASS -se "USE $DBNAME; SELECT sede, fede, lede FROM $DBTABL WHERE cf='$CFPI'")

read TAGSEDE TAGFEDE TAGLEDE <<< $DBDATAF



/usr/bin/perl -p -i -e "s/TAGDATAINSERT/$TAGDATAINSERT/g" $i

1 个答案:

答案 0 :(得分:2)

您的代码出现故障有两个原因:

  1. $DBDATAF传递给<<<运算符时,标签将被丢弃。为了保留它们,请对变量进行双引号,如下所示。

  2. read使用IFS特殊变量将输入行分隔为单词。默认情况下,它在制表符,空格或换行符上分隔。因此,即使传递给<<<时选项卡已经预先存在,read命令也会分隔空格。将IFS设置为标签会使read按需分割。将IFS分配和read放在一行可确保{read}退出后IFS返回默认值

  3. IFS="$( echo -e '\t' )" read TAGSEDE TAGFEDE TAGLEDE <<< "$DBDATAF"