[英]Bash expansion: Different results when running file or running in terminal // extglob
在某些腳本中,我想使用當前文件夾內的文件夾名稱。 我想獲取文件夾名稱,這里只將有問題的部分放在示例中。 如果從終端運行此命令,則會得到:
$ for D in */; do echo ${D%%+(/)} ; done
galaxya8
iphone6s
motog6
motog7
$ echo ${0}
/bin/bash
$ bash --version
GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
但是,如果我將其放入文件中並運行該文件,則會得到帶有斜杠的名稱:
$ echo 'for D in */; do echo ${D%%+(/)} ; done' >> test.sh
$ bash test.sh
galaxya8/
iphone6s/
motog6/
motog7/
我在這里看到了bash的擴展。 我想念什么? 也許只有交互式shell的一些默認值?
最小,完整且可驗證的示例 (感謝@ kamil-cuk):
$ D=a/; echo ${D%%+(/)}; bash <<<'D=a/; echo ${D%%+(/)}'
a
a/
從bash手冊 :
如果使用內置的shopt啟用了extglob shell選項,則會識別出幾個擴展的模式匹配運算符。 ...
+(模式列表)
匹配給定模式的一個或多個出現。
您需要在腳本中啟用extglob
shopt
選項,才能使用擴展模式匹配運算符+(/)
。
echo 'shopt -s extglob; for D in */; do echo ${D%%+(/)} ; done' > test.sh
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.