簡體   English   中英

Bash擴展:運行文件或在終端// extglob中運行時,結果不同

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

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