Bash: =~ и сопоставление с образцом в Git Bash 3.1

Я в основном хочу сделать следующее в Bash 3.1 под Windows (Git Bash):

#!/bin/bash
#set -x
shopt -s extglob
shopt -s nocasematch

declare file='[Vol 01] - 04 - This message'
declare filesafe="${file}"

declare pattern='\[Vol ([0-9]+)\] - ([0-9]+) -*'
if [[ "${file}" =~ $pattern ]]; then
  echo "regexp: $(printf "%s %-2d %-3d" "${filesafe}" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" ) - - -"
else
        echo "failed: $(printf "%s" "${filesafe}") - - - - -"
fi

=~ не работает, потому что его нет в этой версии Bash.

Примечание: скрипт работает с Bash 4.3.33 в Gentoo.

Версии Git и Bash следующие:

$ git --version ; bash --version
git version 1.9.5.msysgit.1
GNU bash, version 3.1.23(6)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.

В единственной документации по Bash 3.1, которую мне удалось найти, указана версия:

Это редакция 3.1-beta1, последнее обновление 5 сентября 2005 г. Справочного руководства GNU Bash для Bash, версия 3.1-beta1.

В этой документации указано, что =~ доступен:

Доступен дополнительный бинарный оператор '=~' с тем же приоритетом, что и '==' и '!='.

Я пропустил что-то вроде какой-то опции с помощью shopt?


person NoDataFound    schedule 18.07.2015    source источник
comment
просто примечание, не включайте свой шаблон в кавычки.   -  person Avinash Raj    schedule 18.07.2015
comment
@anubhava, ... теоретически должен, но в сборке bash для msys, поставляемой этой версией Git для Windows, отсутствуют другие функции, доступные в восходящем потоке, - например, попробуйте использовать замену процесса.   -  person Charles Duffy    schedule 19.07.2015
comment
Файл - это некоторый файл, например {{[Vol 02] - 0001 - Volume 2, глава 1}}. Тем не менее, мой вопрос больше связан с реализацией оператора =~ в Git Bash под Windows, код является просто примером, где он довольно явно терпит неудачу (например, я не узнаю =~ чувак!).   -  person NoDataFound    schedule 19.07.2015


Ответы (1)


Вы можете просто использовать более новую версию этого bash: используйте git-for -windows, который вскоре заменит устаревший msysgit.

Настройка не требуется: распакуйте PortableGit-2.4.6-5th-release-candidate-64-bit.7z.exe в любом месте и вызовите c:\path\to\PortableGit-2.4.6-5th-release-candidate-64-bit\git-bash.exe.

Вы получите bash 4.3.39 2013 года (вместо старого bash 3.1.20 2005 года msysgit): это один самых последних патчей 4.3, май 2015.

Этого более чем достаточно, чтобы заставить =~ работать.

person VonC    schedule 18.07.2015
comment
Есть ли список поддерживаемых версий Windows? Я застрял с XP на работе, и хотя скрипт (и мой вопрос) предназначен для чего-то дома, мне действительно интересно сейчас переключиться на git-for-windows. - person NoDataFound; 19.07.2015
comment
@NoDataFound Xp работает нормально. Просто распакуйте 32-битную версию. github.com/git-for-windows/git/releases/download/ - person VonC; 19.07.2015