我正在帮助为社区项目创建一个解决方案,以便在社区精神中免费监控河流水位。这项工作的最终成果将是一个从河流水平探测中获取数据的系统,并为在线社区生成图表。
我很早就开始学习这个项目了,因为我熟悉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
答案 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
精彩的论坛 - 非常感谢你:)