Bash+MySQL-d backtick问题
我正在帮助创建一个社区项目的解决方案,以社区精神免费监测河流水位。这项工作的最终成果将是一个从河流水位探测器获取数据的系统,并为在线社区生成图形 我很早就开始了这个项目,因为我对Bash很熟悉,所以我使用它从包含数据的探测器中获取一个文本文件,并将其推送到一个MySQL数据库中。在我遇到绊脚石之前,一切都进行得非常顺利。我的数据库表中的许多列都是数字,因此要使用MySQL命令行工具与这些列交互,必须使用backticks。不幸的是,我想从MySQL语句中获取输出并将其放入变量中,但我认为由于两组回退标记,MySQL没有得到正确的命令 我已经用一个讨厌的工作来敷衍它,就像这样,不管它效率如何:Bash+MySQL-d backtick问题,mysql,bash,Mysql,Bash,我正在帮助创建一个社区项目的解决方案,以社区精神免费监测河流水位。这项工作的最终成果将是一个从河流水位探测器获取数据的系统,并为在线社区生成图形 我很早就开始了这个项目,因为我对Bash很熟悉,所以我使用它从包含数据的探测器中获取一个文本文件,并将其推送到一个MySQL数据库中。在我遇到绊脚石之前,一切都进行得非常顺利。我的数据库表中的许多列都是数字,因此要使用MySQL命令行工具与这些列交互,必须使用backticks。不幸的是,我想从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
尝试这样做:
dbEntry="$(printf "SELECT \140%s\140 FROM 'RiverDataDays' WHERE date = '%s';\n" "$timeSample" "$(<tmpValue )" | mysql -N -D "$targetDatabase")"
echo "$dbEntry"
建议改为使用语法。$内的反斜杠处理不那么令人惊讶,而且$更容易嵌套。看
是反勾号的八进制表示形式,请参见
man ascii
遵循Sputnick的链接:-
然后相应地修改了代码
dbEntry=$mysql-N-D$targetDatabase-e从RiverDataDays中选择\`timeSample\`date=$dateOfFile echo$dbEntry
精彩论坛-非常感谢:在引号内的反斜杠前加一个反斜杠不起作用?你不应该逃过第一个回击。Sputnick-非常感谢:老实说,你的语法让我有点不知所措,我今天就要挂断了!,但阅读这篇文章清楚地说明了使用回勾的问题。通过将上述语句包含在$中,解决了我的问题,因为我相信语法在$中得到了扩展和执行。我认为您为我指明了正确的方向-实际的答案是:-dbEntry=$mysql-N-D$targetDatabase-e从RiverDataDays中选择`$timeSample`,其中date=$dateOfFile;再次感谢您的时间和努力-谢谢您善良的先生:
foo=`command`
foo=$(command)
\140
man ascii