Завершение Bash не работает для MSYS Bash.Синтаксическая ошибка регулярного выражения - PullRequest
3 голосов
/ 02 февраля 2012

Я пытался установить bash-complete для MSYS bash, но, похоже, он содержит некоторые синтаксические ошибки. Сбой со следующим сообщением

bash: /usr/local/share/bash-completion/bash_completion: line 625: syntax error in conditional expression: unexpected token `('
bash: /usr/local/share/bash-completion/bash_completion: line 625: syntax error near `^(\'
bash: /usr/local/share/bash-completion/bash_completion: line 625: `    if [[ $cur =~ ^(\$\{?)([A-Za-z0-9_]*)$ ]]; then'

вот код, который не работает

# Complete variables.
# @return  True (0) if variables were completed, 
#          False (> 0) if not.
_variables()
{
    if [[ $cur =~ ^(\$\{?)([A-Za-z0-9_]*)$ ]]; then
        [[ $cur == *{* ]] && local suffix=} || local suffix=
        COMPREPLY+=( $( compgen -P ${BASH_REMATCH[1]} -S "$suffix" -v -- \
            "${BASH_REMATCH[2]}" ) )
        return 0
    fi
    return 1
}

1 Ответ

1 голос
/ 05 февраля 2012

Вы используете бета-версию (1.99) bash-complete, вместо этого вы можете попробовать последнюю стабильную версию (1.3)

Если вам действительно нужна бета-версия, вам нужны кавычки вокруг регулярного выражения ^(\$\{?)([A-Za-z0-9_]*)$в строке if [[ $cur =~ ^(\$\{?)([A-Za-z0-9_]*)$ ]]; then обработка оператора = ~ различается в зависимости от версии bash (обязательны кавычки IIRC до 3.2)

...