Bash
全域匹配子目錄
希望我不是唯一一個發現不當行為的人。如果你在一小時前問我,我會有 99% 的信心
test/src/**/*.js
將匹配 src 中的所有 .js 文件和 src 的所有子目錄。但我在 MacOS 上並使用 Bash 3.2.57,它不匹配多個文件。
有誰知道可能出了什麼問題?
Bash 3.2 不支持 globstar:
$ shopt -s globstar bash: shopt: globstar: invalid shell option name
沒有
shopt -s globstar
,**
只是一個普通的非遞歸全域。bash新聞頁面說:
這是對自 bash-3.2 發布以來添加到 bash-4.0 的新功能的簡要描述。與往常一樣,手冊頁 (doc/bash.1) 是查找完整描述的地方。
- Bash 中的新功能
$$ … $$ w。有一個新的 shell 選項:
globstar
. 啟用後,通配程式碼會進行**
特殊處理——它會遞歸匹配所有目錄(以及其中的文件,如果合適)。您需要將 bash 更新到至少 4.0(可能從 homebrew 安裝一個),或者使用
find
.