ワイルドカードのオンとオフを切り替えるには?

ワイルドカードのオンとオフを切り替えるには?

私の~./bashrcエイリアスはもはやこのようなワイルドカードを使用しません。

alias x='set -f;. any.sh'

しかし、ワイルドカードを再度有効にするコマンドは何ですか?または、このオプションをどこで設定する必要がありますかany.sh

どんな答えでも大歓迎です。

ベストアンサー1

any.shbash4.4+シェルが、with、または - ベースのシェルからコードを解釈するときにのみglobを無効にするには、ash次のようにします。

x() {
  local -
  set -o noglob
  . any.sh
}

またはzsh:

x() {
  set -o localoptions -o noglob
  . any.sh
}

つまり、エイリアスではなく関数を使用してください(複数のコマンドでエイリアスを使用すると、必要に応じて機能しないため、エイリアスを使用したくありませんcmd | x)。 (変更方法として)cmd && xオプションを変更する必要があります。$-参照)ローカル機能を使用し、globを無効にしてファイルをインポートします。

以前のバージョンでは、bash次のことができます。

x() {
  local ret restore
  [[ $- = *f* ]] || restore='set +o noglob'
  set -o noglob
  . any.sh
  ret=$?
  eval "$restore"
  return "$ret"
}

または、次のようなより一般的なヘルパー機能を使用することもできます。

withopt() {
  local ret option
  local -a restore
  option=$1; shift
  [[ -o $option ]] || restore=(set +o "$option")

  set -o "$option"
  "$@"
  ret=$?
  "${restore[@]}"
  return "$ret"
}

その後、必要に応じてエイリアスを使用できます。

alias x='withopt noglob . any.sh'

*これにより、拡張機能はブロックされません。

x *

このnoglobオプションは、コマンドが評価されてから長い間最後にアクティブになるためです。これを行うには、次を参照してください。私の他の答え(さまざまな質問に対する回答)。

おすすめ記事