我在寻找匹配的“”时得到EOF

时间:2011-08-26 13:13:36

标签: bash shell

这是一个bash脚本。我在if语句行中得到错误

# 2. read a line of input from the keyboard
   read answer

    if [-z "$answer"]
    then
        $answer=$default
    else
        $default=$answer
    fi

我不再做太多的打击,我看不到错误,我已经尝试了

if [-z "$answer"]; then

并且失败也有同样的错误。任何人都可以看到错误吗?

编辑更新 我改成了这个

read answer

        if [ -z "$answer" ]
        then
            $answer=$defaultEntry
        else
            $defaultEntry=$answer
        fi

发生同样的错误

5 个答案:

答案 0 :(得分:3)

只需在括号和条件之间留出空格:

if [ -z "$answer" ]

答案 1 :(得分:0)

[-z之间以及"]之间应该有空格。

[test计划的别名。

[是一个程序,bash可以执行。

[-z不是,因此是错误。

答案 2 :(得分:0)

您需要[]周围的空格。 E.g:

if [ -z "$answer" ]
then
    $answer=$default
else
    $default=$answer
fi

原因是[实际上是一个shell内置命令。

[me@home]$ type [
[ is a shell builtin
[me@home]$ which [
/usr/bin/[

如果省略[之后的空格,则会将命令名称修改为不存在的内容。

[me@home]$ [ -z "something" ] # OK. calling command [ with some args
[me@home]$ [-z "something" ]  # fail. calling command [-z with some args
-bash: [-z: command not found

[命令还会检查最后一个参数是否为],因此如果你没有空格,那么它就会成为前一个参数的一部分而[命令会抱怨:

[me@home]$ [ -z "something" ]  # this runs fine becuase last arg is ]
[me@home]$ [ -z "something"]  # will fail. last arg is "something"]
-bash: [: missing `]'

答案 3 :(得分:0)

正如其他人所指出的那样,[]周围的空间非常重要。

此外,在分配变量时,不应使用$

试试这个:

read answer

if [ -z "$answer" ]
then
    answer=$defaultEntry
else
    defaultEntry=$answer
fi

答案 4 :(得分:0)

read answer

if [ -z "$answer" ]    #Spaces!
then
    answer=$default    # Use "answer" and not "$answer"
else
    default=$answer    # Use "default" and not "$default"
fi

现在可以正常工作,但我没有$ default的值。我怀疑你已经在其他地方做过(以及设置提示)。