我正在帮助一个社区项目创建一个解决方案,该项目本着社区精神,免费监测河流水位。这项工作的最终产品将是一个从河流水位探测器获取数据并为在线社区生成图表的系统。
我在这个项目的早期,因为我对Bash很熟悉,所以我使用它从探测器中提取一个包含数据的文本文件,并将其推送到MySQL数据库中。一切都很顺利,直到我遇到了一个绊脚石。我的数据库表中的许多列都是数字,因此要使用MySQL命令行工具与这些列进行交互,必须使用反号。不幸的是,我想将MySQL语句的输出放入一个变量中,但我认为由于两组倒计时,MySQL没有得到正确的命令。
我用一种肮脏的工作来推敲它,就像这样,工作效率很低:
mysql -N -D $targetDatabase -e "select \`"$timeSample"\` from RiverDataDays where date="$dateOfFile";" >tmpValue
dbEntry=`cat tmpValue`
echo $dbEntry但实际上,我想要做的是将它直接推入一个变量中,如下所示:
dbEntry=`mysql -N -D $targetDatabase -e "select \`"$timeSample"\` from RiverDataDays where date="$dateOfFile";"`
echo $dbEntry发布于 2013-04-15 03:36:08
试着这样做:
dbEntry="$(printf "SELECT \140%s\140 FROM 'RiverDataDays' WHERE date = '%s';\n" "$timeSample" "$(<tmpValue )" | mysql -N -D "$targetDatabase")"
echo "$dbEntry"或
dbEntry="$(printf "SELECT \`%s\` FROM 'RiverDataDays' WHERE date = '%s';\n" "$timeSample" "$(<tmpValue )" | mysql -N -D "$targetDatabase")"
echo "$dbEntry"反引号(`)用在旧式的命令替换中,例如
foo=`command`这个
foo=$(command)建议使用语法。$()中的反斜杠处理并不令人惊讶,而且$()更容易嵌套。请参阅http://mywiki.wooledge.org/BashFAQ/082
\140是反记号的八进制表示形式,请参见
man ascii发布于 2013-04-15 14:07:15
点击人造卫星的链接:- http://mywiki.wooledge.org/BashFAQ/082
然后相应地修改代码
dbEntry=$(mysql -N -D $targetDatabase -e "select `"$timeSample"` from RiverDataDays where date="$dateOfFile";")
echo $dbEntry
精彩论坛-非常感谢:)
https://stackoverflow.com/questions/16003367
复制相似问题