Bash

全域匹配子目錄

  • July 18, 2017

希望我不是唯一一個發現不當行為的人。如果你在一小時前問我,我會有 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) 是查找完整描述的地方。

  1. Bash 中的新功能

$$ … $$ w。有一個新的 shell 選項:globstar. 啟用後,通配程式碼會進行**特殊處理——它會遞歸匹配所有目錄(以及其中的文件,如果合適)。

您需要將 bash 更新到至少 4.0(可能從 homebrew 安裝一個),或者使用find.

引用自:https://unix.stackexchange.com/questions/379191