在 shell 脚本中出现错误“查找匹配的 `'' 时出现意外的 EOF”

在 shell 脚本中出现错误“查找匹配的 `'' 时出现意外的 EOF”

我在 /bin/sh 中编写了一个简单的 shell 脚本并遇到了下面的问题。

/tmp/a.sh: line 14: unexpected EOF while looking for matching `''
/tmp/a.sh: line 17: syntax error: unexpected end of file

*********** Shell 脚本 *************

psqlCmd="DELETE FROM cmdb  WHERE cmdb.sys_class_path = '/!!/$['"

答案1

$[ ... ]是弃用的 bash 语法算术扩展。 从man bash

Arithmetic Expansion

   Arithmetic  expansion allows the evaluation of an arithmetic expression
   and the substitution of the result.  The format for  arithmetic  expan‐
   sion is:

          $((expression))

   The  old  format $[expression] is deprecated and will be removed in up‐
   coming versions of bash.

例如

$ bash << 'EOF'
echo "'$[1+2]'"
EOF
'3'

$ bash << 'EOF'
echo "'$['"
EOF
bash: line 1: unexpected EOF while looking for matching `''
bash: line 2: syntax error: unexpected end of file

POSIX /bin/sh(由 Ubuntu 提供/bin/dash)不共享此行为:

$ sh << 'EOF'
echo "'$[1+2]'"
EOF
'$[1+2]'

$ sh << 'EOF'
echo "'$['"
EOF
'$['

所以,尽管你提到“/bin/sh 中的一个简单 shell 脚本”看起来您实际上是在用 bash 运行脚本。无论哪种情况,您都可以通过转义来禁用扩展$

psqlCmd="DELETE FROM cmdb  WHERE cmdb.sys_class_path = '/!!/\$['"

请注意,在交互的!!bash shell,你可能还会遇到shell 历史记录的问题事件指示符- 但脚本中历史记录扩展默认是禁用的。

也可以看看:

相关内容