Bash函数调用错误

Bash function call error

我在 Bash 函数传递参数时需要一些帮助。我需要将参数传递给 Bash 中的 SQL 查询,但我收到错误消息。

#!/bin/bash --

whw='mysql -uroot -proot -habczx.net'


function foo() {
  for v in "$@"; do
    eval "$v";            # line 9
    echo "${v}";
  done

  ${whw} -e"select id, idCfg, idMfg, $DATE from tblMfg"
}

foo DATE="curdate()"

下面是我收到的错误信息:

$ sh test4.sh
test4.sh: eval: line 9: syntax error near unexpected token `('
test4.sh: eval: line 9: `DATE=curdate()'
test4.sh: line 9: warning: syntax errors in . or eval will cause future versions of the shell to     abort as Posix requires
DATE=curdate()
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from tblMfg limit 4' at line 1

==

如果我将函数调用更改为以下,我不会收到任何错误消息:

foo DATE="2014-12-21"

==

有什么帮助吗?

谢谢!

问题是求值表达式。您可以通过输入它来查看:

$ DATE=bla()
-bash: syntax error near unexpected token `('

如果你把它放在引号里,它会起作用:

$ DATE="bla()"

为了将引号传递给评估,需要保护它们免于在调用站点进行评估:

foo 'DATE="curdate()"'

应该可以解决问题。

顺便说一句:评估字符串是相当危险的,特别是如果参数来自不受信任的用户,可以使用 foo "rm -rf /" :)

我不确定你为什么需要评估,而不是 $DATE 你也可以使用 $1 然后

${whw} -e"SELECT ... ...."
foo "curdate()"