でbashスクリプトの実行に問題がありますzsh
。スクリプトは次のようになり、bashで実行する必要があります。
#!/bin/bash
echo "<235234>" | egrep -oe [0-9]+
しかし、私のシェルはデフォルトでありますので、上記のスクリプトをzsh
実行するにはプロンプトに/bin/bash
入力してzsh
実行するだけです. script.sh
。
ただし、これによりエラーが発生します。
zsh: no matches found: [0-9]+
(それを変えなければならなかったが235234
)。
この時点で私は混乱していて、次の質問があります。
- それでは、
bash
エラーが報告されるのはなぜですかzsh
? egrep
正規表現が失敗するのはなぜですか?正規表現が私に合うようです。
注:重要な場合は、スクリプトを変更しないでください(複数のユーザーが共有するため、変更しないでください)。
ありがとう
答え1
スクリプトが正しく起動されたら(前に他のコメントがありません)、最初にスクリプトを入力せずにスクリプトのみを入力すると#!/bin/bash
実行できます。これは、「コマンドラインに入力したようにこのファイルの内容を実行する」(Unixシェル用語で「ソース」と呼ばれる)を意味するincludeステートメントです。/path/to/script.sh
.
.
bashを実行してスクリプトをインポートするとうまくいきます。私の考えでは、いくつかのケースではbashが自動的に起動しましたが、zshを好むので、bashを自動的にzshに切り替えるように設定しました。exec zsh
おそらく。~/.bashrc
つまり~/.profile
、そのままにしてください.bashrc
。zsh
端末で実行するSHELL
環境変数を設定します。
# in ~/.profile
export SHELL=/bin/zsh
if [ -t 1 ]; then exec $SHELL; fi
残念ながら、スクリプトにエラーがあるため修正できません。 Bashでも括弧を囲む必要があります。現在のディレクトリに呼び出されたファイルがある場合、3+
呼び出しは一連の乱数ではなくegrep
1つ以上の数字の発生を検索します。3
というファイルがあり、3+
というファイルがある場合、4+
呼び出しはegrep
そのファイルから3
sを検索します4+
。ここでbashとzshの違いは、指定されたパターンと一致するファイルがない場合にのみ表示されます。 bashは置換されていないパターンでコマンドを自動的に実行し、zshは(デフォルトでは)エラー信号を送信します。