我试图从MySQL数据库中获取值,以便稍后用perl替换,一切正常但是如果记录包含空格" "变量将被设置不正确。
如果我在数据库中有以下示例:
变量的结果将是:
我知道设置$ 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
答案 0 :(得分:2)
您的代码出现故障有两个原因:
当$DBDATAF
传递给<<<
运算符时,标签将被丢弃。为了保留它们,请对变量进行双引号,如下所示。
read
使用IFS
特殊变量将输入行分隔为单词。默认情况下,它在制表符,空格或换行符上分隔。因此,即使传递给<<<
时选项卡已经预先存在,read
命令也会分隔空格。将IFS
设置为标签会使read
按需分割。将IFS分配和read
放在一行可确保{read}退出后IFS
返回默认值
IFS="$( echo -e '\t' )" read TAGSEDE TAGFEDE TAGLEDE <<< "$DBDATAF"