簡體   English   中英

Shell球形否定在bash中不起作用

[英]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.

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