Я в принципе хочу сделать следующее в Bash 3.1 под Windows (Git Bash):Bash: = ~ и сопоставления с образцом в Git Bash 3.1
#!/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-бета1, последний обновлено 5 сентября 2005 г., GNU Справочное руководство Bash для Bash, версия 3.1-beta1.
Эта документация Сформулируйте =~
доступна:
Дополнительный бинарный оператор '= ~', есть в наличии, с тем же старшинства как '==' и '! ='.
Я пропустил что-то вроде какой-то опции, используя shopt?
только примечание стороны, не включайте ваш шаблон внутри кавычек. –
@anubhava, ... должен теоретически, но сборка msys bash, отправленная этим винтажем Git для Windows, не содержит других функций, доступных в восходящем направлении, - попробуйте использовать замену процессов, f'rinstance. –
Файл - это такой файл, как {{[Vol 02] - 0001 - Том 2, глава 1}}. Тем не менее, мой вопрос больше связан с реализацией оператора ~ ~ в Git Bash под Windows, код - это просто пример, где он не так явно (например, «я не признаю = ~ чувак!»). – NoDataFound