以下を考慮してくださいGNUシェルパラメータ拡張bashコマンドラインから、つまりここで説明されています:
$ a='hello world example'
$ echo ${a//+( )/_}
hello_world_example
ただし、同じパラメータ拡張はbashスクリプトでは機能しなくなりました。
# !/usr/bin/env bash
a='hello world example'
echo "${a//+( )/_}"
結果は変更されていない文字列です。
hello world example
" "
より単純なパラメータ拡張では、コマンドの後に二重引用符が必要であることをすでに知っていますが、echo
理由はわかりません。
しかし、この特定のパラメータ拡張がbashスクリプトで機能するようにするにはどうすればよいですか?なぜ?
答え1
+(...)
の一部です拡張グローバルを使用して明示的に有効にする必要がありますshopt -s extglob
。
対話型シェルで動作している場合は、おそらくshopt -s extglob
シェルの起動ファイルの1つにありますbashrc
。明示的にスクリプトに追加します。パーサーの動作方法を変更する方法にはいくつかの欠点があるため、独自の行にあることをお勧めします。以下を参照してください。 shopt extglob設定の範囲制限は何ですか?そして他のオプションは?