【问题标题】:Unexpected EOF error while looking for matching `)' [duplicate]寻找匹配的`)'时出现意外的EOF错误[重复]
【发布时间】:2014-10-09 09:35:47
【问题描述】:

尝试运行 bash 脚本,虽然有些事情正常,但我收到以下消息:

line 34: unexpected EOF while looking for matching `)'

这是代码,我已经标记了有问题的行(在斜边法中):

#!/bin/bash
# Bash Script Calculator
# -----------------------------------------------------
# 
# 
# 
# -----------------------------------------------------

a=$1
op="$2"
b=$3

if [ $# -lt 3 ]
then
    echo "$0 num1 opr num2"
    echo "Operators: +,-,x,/"
    exit 1
fi

case "$op" in
    +) echo $(( $a + $b ));;
    -) echo $(( $a - $b ));;
    x) echo $(( $a * $b ));;
    /) echo $(( $a / $b ));;
    hyp) hypotenuse;;
    area) area;;
    *) echo "Error: Not a listed operator"
       echo "If using multiplication, use "x"";;

esac

hypotenuse()
{
    hyp=$(bc -l << EOF     #LINE 34
    scale = 9
    sqrt ( $1 * $1 + $3 * $3 )
    EOF
    )   
    echo "$hyp"
}

area()
{
    area=$(echo "scale=2;3.14 * ($a * $a)" | bc)
    echo "$area"
}

我错过了什么吗?我花了一些时间在 Google 等上查找内容,似乎没有其他信息告诉我。

感谢您的帮助!

【问题讨论】:

  • 您是否通过shellcheck.net 运行过这个?它正确地指出了错误(以及其他几个错误)。
  • 是的,你确实错过了一些东西:某处的结束分隔符。
  • @Kaz, ...好吧,分隔符在那里;只是因为前面的人物,它没有被识别
  • @CharlesDuffy +1 for shellckeck.net

标签: bash


【解决方案1】:

你的heredoc终止符是错误的:

{
    hyp=$(bc -l << EOF     #LINE 34
    scale = 9
    sqrt ( $1 * $1 + $3 * $3 )
    EOF
^^^^---these spaces count

您的终结符现在实际上是 [space][space][space][space]EOF,而 bash 正在寻找不带空格的 EOF。终止符必须从行首开始,之前(或之后)没有任何空格。

由于您的heredoc 永远不会终止,bash 将在脚本末尾运行,寻找永远不会出现的),因为heredoc 消耗了您实际拥有的那个。

【讨论】:

  • 可能值得指出&lt;&lt;-EOF 作为替代方案(允许在heredoc 结束时基于制表符而不是基于空格的缩进)。
  • @CharlesDuffy:这对我来说是新的。好提示。谢谢。
  • 这是一个shell愚蠢。如果您使用
  • 感谢大家的回答!永远不会想到空白可以解释任何事情,尤其是当它被正确地标记为方法时。
  • heredoc 终止符大约是唯一可以计算的时间。
猜你喜欢
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多