3

我正在帮助创建一个社区项目的解决方案,以社区精神免费监测河流水位。这项工作的最终产品将是一个从河流水位探测器获取数据并为在线社区生成图表的系统。

我是该项目的早期,并且由于我熟悉 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
4

2 回答 2

5

尝试这样做:

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-14T19:36:08.217 回答
0

关注 Sputnick 的链接:- http://mywiki.wooledge.org/BashFAQ/082

然后相应地修改代码

dbEntry=$(mysql -N -D $targetDatabase -e "select \`"$timeSample"\` from RiverDataDays where date="$dateOfFile";")

回声 $dbEntry

精彩的论坛 - 非常感谢你:)

于 2013-04-15T06:07:14.857 回答