簡體   English   中英

Bash:=〜和Git Bash 3.1中的模式匹配

[英]Bash: =~ and pattern matching in Git Bash 3.1

我基本上想在Windows(Git Bash)下的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中不存在。

注意:該腳本適用於Gentoo中的Bash 4.3.33。

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,最后更新於2005年9月5日的GNU Bash參考手冊,適用於Bash,版本3.1-beta1

此文檔說明=~可用:

可以使用另一個二元運算符'=〜',其優先級與'=='和'!='相同。

我是否想念使用shopt的某些選項?

你可以簡單地使用更新版本的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調用c:\\path\\to\\PortableGit-2.4.6-5th-release-candidate-64-bit\\git-bash.exe

您將獲得2013年4.3.39 bash (而不是舊的2005年3.1.20 bash of msysgit):這是最新的4.3補丁之一 ,2015年5月。

這足以使=~工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM