Я в основном хочу сделать следующее в 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?