zshシェルでbashスクリプトを実行する

zshシェルでbashスクリプトを実行する

でbashスクリプトの実行に問題がありますzsh。スクリプトは次のようになり、bashで実行する必要があります。

#!/bin/bash
echo "<235234>"  | egrep -oe [0-9]+

しかし、私のシェルはデフォルトでありますので、上記のスクリプトをzsh実行するにはプロンプトに/bin/bash入力してzsh実行するだけです. script.sh

ただし、これによりエラーが発生します。

zsh: no matches found: [0-9]+

(それを変えなければならなかったが235234)。

この時点で私は混乱していて、次の質問があります。

  1. それでは、bashエラーが報告されるのはなぜですかzsh
  2. egrep正規表現が失敗するのはなぜですか?正規表現が私に合うようです。

注:重要な場合は、スクリプトを変更しないでください(複数のユーザーが共有するため、変更しないでください)。

ありがとう

答え1

スクリプトが正しく起動されたら(前に他のコメントがありません)、最初にスクリプトを入力せずにスクリプトのみを入力すると#!/bin/bash実行できます。これは、「コマンドラインに入力したようにこのファイルの内容を実行する」(Unixシェル用語で「ソース」と呼ばれる)を意味するincludeステートメントです。/path/to/script.sh..

bashを実行してスクリプトをインポートするとうまくいきます。私の考えでは、いくつかのケースではbashが自動的に起動しましたが、zshを好むので、bashを自動的にzshに切り替えるように設定しました。exec zshおそらく。~/.bashrcつまり~/.profile、そのままにしてください.bashrczsh端末で実行するSHELL環境変数を設定します。

# in ~/.profile
export SHELL=/bin/zsh
if [ -t 1 ]; then exec $SHELL; fi

残念ながら、スクリプトにエラーがあるため修正できません。 Bashでも括弧を囲む必要があります。現在のディレクトリに呼び出されたファイルがある場合、3+呼び出しは一連の乱数ではなくegrep1つ以上の数字の発生を検索します。3というファイルがあり、3+というファイルがある場合、4+呼び出しはegrepそのファイルから3sを検索します4+。ここでbashとzshの違いは、指定されたパターンと一致するファイルがない場合にのみ表示されます。 bashは置換されていないパターンでコマンドを自動的に実行し、zshは(デフォルトでは)エラー信号を送信します。

関連情報