Я получаю EOF при поиске соответствия `" ' - PullRequest
0 голосов
/ 26 августа 2011

это скрипт bash.я получаю сообщение об ошибке в строке оператора if

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

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

я больше не делаю bash, я не вижу ошибки, я пробовал

if [-z "$answer"]; then

и это не удалось какхорошо с той же ошибкой.Кто-нибудь еще может увидеть ошибку?

РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ Я изменил ее на это

read answer

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

, и такая же ошибка происходит

Ответы [ 5 ]

3 голосов
/ 26 августа 2011

просто оставьте пробелы между скобками и условием:

if [ -z "$answer" ]
0 голосов
/ 26 августа 2011
read answer

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

Теперь это работает, за исключением того, что у меня нет значения для $ default.Я подозреваю, что вы сделали это в другом месте (а также задали подсказку).

0 голосов
/ 26 августа 2011

Пробел вокруг [ и ] важен, как отмечали другие.

Кроме того, вы не должны использовать $ при присвоении переменной.

Попробуйте это:

read answer

if [ -z "$answer" ]
then
    answer=$defaultEntry
else
    defaultEntry=$answer
fi
0 голосов
/ 26 августа 2011

Вам нужны пробелы вокруг [ и ].Например:

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

Причина этого в том, что [ на самом деле является встроенной командой оболочки.

[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 `]'
0 голосов
/ 26 августа 2011

Между [ и -z должен быть пробел, а между " и ].

[ - псевдоним программы test.

[ - это программа, которую может выполнить bash.

[-z - нет, следовательно, ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...