[英]Shell globbing negation doesn't work in bash
我目前很困惑,為什么終端中的shell globing可以與否定一起使用,但是在bash中運行時卻顯示錯誤。
采取在以下終端中執行的命令,該命令顯示./HTML
目錄中的所有js文件,但以.bundle.js
結尾的js文件.bundle.js
。
$ shopt -s globstar
$ ls ./HTML/**/!(*.bundle).js
上面的命令運行良好,現在將其放入bash文件中
list-js.sh
#!/usr/bin/env bash
shopt -s globstar
ls ./HTML/**/!(*.bundle).js
在終端中執行它:
$ bash list-js.sh
list-js.sh: line 4: syntax error near unexpected token `('
list-js.sh: line 4: `ls ./HTML/**/!(*.bundle).js'
如您所見,它顯示語法錯誤。
globstar
僅啟用**
模式。 extglob
選項允許!(...)
。 在交互式外殼程序中的某個位置已經啟用了它(也許在.bashrc
,也許您之前輸入了shopt -s extglob
)。 但是,需要在腳本中顯式啟用它,因為此類設置不會從啟動腳本的shell繼承。
#!/usr/bin/env bash
shopt -s globstar extglob
ls ./HTML/**/!(*.bundle).js
( globstar
,沒有globstar
**
不會引起語法錯誤,因為它被簡單地視為兩個相鄰的*
s,第二個是多余的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.