zshの(N)モードを使用するためにbashを有効にする方法は?

zshの(N)モードを使用するためにbashを有効にする方法は?

私はzshとBashで実行されるスクリプトを開発しようとしています(理想的には同じことをします:-)。問題は、ある時点でzshの特定の部分に(N)。だから:this_pattern*(N)。 zshでは、一致するものがない場合、パターンは空になります。

Bashは、これについて「予期しない記号が原因で構文エラーが発生する」と言います。 Bashでの実行はzshの特定の部分では決して起こらず、このエラーメッセージは解析コードによって引き起こされます!

解析しないなどの方法でBashがこれを食べるのに役立ちますか?

ベストアンサー1

からzsh_expn

  N      sets the NULL_GLOB option for the current pattern

したがって、bashメソッドはnullglobそのモードのオプションを設定することです。

( shopt -s nullglob || setopt NULL_GLOB && yourcommand this_pattern* )

によって生成されたサブシェルに対してのみこのオプションを設定して機能します(…)。 (それぞれbashとzsh組み込みでshopt失敗setoptまたは失敗しますが、有効な設定オプションを使用すると、一致しないパターンはエラーなしで消え、左から右に評価されます。&&||

これは確かに美学が不足して(申し訳ありませんが、@StéphaneChazelas!)、サブシェルの作成によりパフォーマンスが低下します。しかし、移植性が欲しいので、zsh固有の機能を実際に使用することはできません。

おすすめ記事