2016-10-21 2 views
0

に私が持っているbashバッシュのパラメータ展開は対話型シェルで動作しますが、いないユーザーのコンソールでスクリプト

$ echo $SHELL 
/bin/bash 
$ bash --version 
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu) 

私は、ファイルtest.shのコードがあります。

$ cat test.sh 
aaa='---aa-aa---' 
echo "${aaa}" 
echo 'does not work...' 
# trim "-" 
echo ${aaa/+(-)} 
echo ${aaa%%+(-)} 
echo 'works for one symbol...' 
echo ${aaa%-} 
echo ${aaa/-} 

最後の2行をうまく動作しますが、前の動作同じ時間で

$ bash test.sh 
---aa-aa--- 
does not work... 
---aa-aa--- 
---aa-aa--- 
works for one symbol... 
---aa-aa-- 
--aa-aa--- 

あなたはそれが動作このコンソールを作成しようとするならば、:

$ aaa='---aa-aa---' 
$ echo ${aaa/+(-)} 
aa-aa--- 
$ echo ${aaa%%+(-)} 
---aa-aa 

だから、なぜそれがスクリプトでは動作しませんか?

+0

https://stackoverflow.com/questions/26726264/why-does-the-pattern-work-in-my-interactive-shell-but-not-a-の複製としてこれを閉じるかどうかを判断しようとしています。スクリプトを実行するか、それ以外の方法で実行します。 @トライプレー、ここに意見がありますか? –

+0

...実際には、レビューでは、この質問のインスタンスが他のものよりもはっきりと尋ねられていると思います(最初に質問されてから)。 –

答えて

3

対話シェルでshopt -s extglobが有効になっていると思われます。これにより、拡張グロビングが有効になります。これはデフォルトの動作ではなく、スクリプトで明示的に有効にする必要があります。詳細はextended pattern matching in the bash hackers wikiを参照してください。

+0

うん...しかし、このコマンドは? 。 – Kirby

+0

拡張グロビングと呼ばれる機能を有効にします。私はリンクで答えを更新します。 – tripleee

+1

'shopt -s extglob'がなければ、パターン' +( - ) 'は照合するリテラル4文字の文字列であり、1つ以上の' -'にマッチするパターンではありません。 – chepner

関連する問題