2012-02-02 3 views
3

Я попытался установить bash-завершение для MSYS bash, но, похоже, он содержит некоторые синтаксические ошибки. Он выдает следующего сообщениеЗавершение Bash не работает для MSYS bash. Синтаксическая ошибка Regex

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 
} 
+3

Возможно, приведенный выше код предназначен для более поздней версии bash, а не «BASH_VERSION = '3.1.17 (1) -release» (по крайней мере, в MSYS, который я установил). Любые эксперты Bash хотят прокомментировать? Удачи. – shellter

ответ

1

Вы используете бета-версию (1.99) Баш-завершение, вы можете попробовать последнюю стабильный вместо (1.3)

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

+0

Спасибо, я попытался добавить цитаты ко всем регулярным выражениям, но столкнулся с другими проблемами. Поэтому я установил стабильную работу, и все получилось просто отлично. – Nekuromento

+0

Насколько я помню, во всем файле было только одно регулярное выражение. Какие еще проблемы? – Sorin

+0

У меня был другой взгляд, в версии 1.99 довольно много регулярных выражений. С какими еще проблемами вы столкнулись? – Sorin