Bash + MySQL -d反引号问题

时间:2013-04-14 19:30:52

标签: mysql bash

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

我很早就开始学习这个项目了,因为我熟悉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

2 个答案:

答案 0 :(得分:3)

尝试这样做:

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

答案 1 :(得分:0)

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

然后相应修改代码

dbEntry = $(mysql -N -D $ targetDatabase -e“从RiverDataDays中选择\`”$ timeSample“\`,其中date =”$ dateOfFile“;”)

echo $ dbEntry

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