Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash+MySQL-d backtick问题_Mysql_Bash - Fatal编程技术网

Bash+MySQL-d backtick问题

Bash+MySQL-d backtick问题,mysql,bash,Mysql,Bash,我正在帮助创建一个社区项目的解决方案,以社区精神免费监测河流水位。这项工作的最终成果将是一个从河流水位探测器获取数据的系统,并为在线社区生成图形 我很早就开始了这个项目,因为我对Bash很熟悉,所以我使用它从包含数据的探测器中获取一个文本文件,并将其推送到一个MySQL数据库中。在我遇到绊脚石之前,一切都进行得非常顺利。我的数据库表中的许多列都是数字,因此要使用MySQL命令行工具与这些列交互,必须使用backticks。不幸的是,我想从MySQL语句中获取输出并将其放入变量中,但我认为由于两组

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

我很早就开始了这个项目,因为我对Bash很熟悉,所以我使用它从包含数据的探测器中获取一个文本文件,并将其推送到一个MySQL数据库中。在我遇到绊脚石之前,一切都进行得非常顺利。我的数据库表中的许多列都是数字,因此要使用MySQL命令行工具与这些列交互,必须使用backticks。不幸的是,我想从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
尝试这样做:

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