Zsh と Bash スクリプト。違いは何ですか?

Zsh と Bash スクリプト。違いは何ですか?
あなたのような読者が MUO をサポートします。当社サイトのリンクを使用して商品を購入すると、アフィリエイト手数料が発生する場合があります。 続きを読む。

Unix 系オペレーティング システムでのシェル スクリプトに関しては、Bash (Bourne Again Shell) と Zsh (Z Shell) の 2 つのシェルが主流です。あなたがプログラマーまたはシステム管理者の場合、これら 2 つのどちらを選択するかが効率と生産性に大きく影響します。





今日のMUOビデオ スクロールしてコンテンツを続けてください

これら 2 つのシェルの違いと類似点を理解すると、コマンド ライン ワークフローを最適化するのに役立ちます。各シェルのニュアンスを理解すると、情報に基づいた決定を下すのに役立ちます。





Bash と Zsh とは何ですか?

Bash は、Linux と macOS の両方のシステムで人気があります。これは、オペレーティング システムと対話し、コマンドを実行するために使用できる強力なツールです。あなたもすることができます シェルスクリプトにBashを使用する 、複数のコマンドを含むスクリプトを作成することでタスクを自動化します。





Zsh (Z シェル) は、さらに多くの機能を備えた Bash の拡張バージョンです。これは macOS のデフォルトのシェルです。 Linux システムでも人気が高まっています。

Bash から Zsh に切り替える方法

Linux システムを使用していて Zsh に切り替えたい場合は、次のことから始めてください。 パッケージマネージャーを使用してインストールする 。たとえば、Debian または Ubuntu では、次のコマンドを使用します。



 sudo apt install zsh

システムにインストールした後、次のコマンドを実行してそれに切り替えます。

 chsh -s $(which zsh)

macOS を使用している場合、Zsh はすでにインストールされています。これに切り替えるには、次のコマンドを実行します。





 chsh -s /bin/zsh

Bash に戻すには、上記のコマンドの Zsh を Bash に置き換えます。

使用しているシェルを確認するには、次のコマンドを実行します。





 echo $SHELL

これは、意図したシェルを使用していることを確認するのに役立ちます。

Zsh と Bash の違い

Zsh と Bash の間にはいくつかの違いがあります。これらの違いを考慮すると、どのシェルが自分に最適かを判断するのに役立ちます。

1. 迅速なカスタマイズ

Zsh は、プロンプトをカスタマイズする簡単な方法を提供します。 % ベースのエスケープ シーケンス。これにより、色と情報を使用した動的なプロンプトが可能になります。シェル プロンプトをカスタマイズするには、 PS1 (プライマリプロンプト)。

 PS1="%F{green}%n@%m %F{blue}%~ %f$ " 

上記のカスタム プロンプトでは、ユーザー名、ホスト名、および現在のディレクトリが異なる色で表示されます。

  ターミナル上の Zsh プロンプトのカスタマイズ

沢山あります Zsh プロンプトをカスタマイズする他の方法 を使用すると、管理インジケーターを設定し、日付と時刻を含めて、新しいプロンプトを保存できます。

Bash は、プロンプトのカスタマイズに関して、少し異なるアプローチを使用します。エスケープ コードを使用して、プロンプトの色と書式の変更を指定します。上記の Zsh と同じカスタマイズを実現するには、次のカスタム プロンプトを使用できます。

 PS1="\[3[32m\]\u@\h \[3[34m\]\w \[3[0m\]$ " 

使用する \[3[0m\] これは、色の変更がプロンプトに続くテキストに影響を与えないようにするため、非常に重要です。

2. 連想配列のサポート

Zsh は連想配列をネイティブにサポートします。これらの配列は、データを関連付けるための便利な方法を提供し、情報の整理と取得を容易にします。使用 宣言する -A 連想配列を明示的に宣言するコマンド:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

次に、値を連想配列に割り当てることができます。

 my_assoc_array=(key1 value1 key2 value2) 

最後に、キーを使用して値にアクセスします。

 echo $my_assoc_array[key1] # Outputs: value1

Bash には連想配列のネイティブ サポートが含まれています バージョン4.0以降。 Zsh の場合と同じ方法で値を宣言して割り当てます。ただし、配列値にアクセスする場合は、キーを中括弧で囲む必要があります。

 echo "${my_assoc_array[key1]}" 

主な違いは、Zsh の連想配列のサポートが Bash よりも機能が豊富で高度であることです。 Zsh を使用すると、連想配列に文字列だけでなく、さまざまなデータ型のキーを含めることができます。 Bash は文字列キーのみをサポートします。

Bash の以前のバージョンでは、回避策を見つけるか、連想配列を使用する外部ツールを用意する必要があります。

3. 拡張グロビングパターン

拡張グロビング パターンは、さまざまな基準に基づいてファイルとディレクトリを選択および操作するための強力かつ柔軟な方法を提供します。これらは、複雑なファイル構造を扱う場合や、ファイル選択を正確に制御する必要がある場合に役立ちます。

Zsh スクリプトでは、次のコマンドを使用してこれらのパターンを有効にできます。 セトプト 指示。たとえば、すべてを一致させるには、 。TXT 現在のディレクトリ内のファイル:

 setopt extended_glob 
txt_files=(*.txt)

.log 拡張子を持つファイルを除くすべてのファイルを照合するには:

 setopt extended_glob 
non_log_files=^(*.log)

Bash では、次のコマンドを使用して有効にする必要があります。 を使用したコマンド 外部グロブ オプション。たとえば、すべてを一致させるには、 。TXT 現在のディレクトリ内のファイル:

 shopt -s extglob 
txt_files=(*.txt)

次のファイルを除くすべてのファイルを照合するには 。ログ 拡大:

 shopt -s extglob 
non_log_files=!(*.log)

グロビング パターンに関する Zsh と Bash の主な違いは、パターンを有効にするために使用されるコマンドです。ただし、一部の演算子が 2 つのシェル間で異なることに注意してください。

4. 高度なパラメータ拡張

Zsh はパラメータの間接的な展開をサポートしています。これにより、名前が別の変数に格納されている変数の値を展開できます。これを実現するには、変数名の先頭に感嘆符を付ける必要があります。

 name="foo" 
result="${!name}"
echo "$result"

一方、Bash はネイティブに間接的な拡張を許可しません。この問題を回避するには、 評価 組み込みコマンドまたは ${!だった} 間接変数参照の構文。

 name="world" 
var="name"
echo ${!var} # This will output: world

Bash と Zsh の類似点

Bash と Zsh には相違点もありますが、いくつかの類似点もあります。

WindowsでMacフォーマットのドライブを読む

1. コマンドライン構文

Bash と Zsh は、同様のコマンド ライン構文を共有します。これは、作成したほとんどのコマンドとスクリプトが変更せずにどちらのシェルでも機能することを意味するため、優れています。 Zsh は Bash 上に構築されているため、同じ基本的なコマンドと機能がすべて含まれています。

ただし、構文には非常に小さな違いがあるので、それを特定して調整する必要があります。

2. コマンド置換の一貫性

コマンド置換は、あるコマンドの出力を別のコマンドに埋め込むプロセスです。両方のシェル間で一貫性があります。

 result=$(ls) 

Bash と Zsh の両方で、 $(コマンド) コマンドの出力を変数に代入する構文。これにより、2 つのシェル間でスクリプトを簡単に移植できます。

3. スクリプトデバッグオプション

Bash と Zsh は両方とも使用します -バツ スクリプトのデバッグ用のフラグ。このフラグを指定してスクリプトを実行すると、実行前に各コマンドが表示されます。これは、スクリプトの問題を特定するのに役立ちます。

 # Debugging a script in both Bash and Zsh 
#!/bin/bash -x

echo "Debugging Bash script"

この Bash スクリプトでは、 -バツ フラグはデバッグを有効にします。 Zsh でも同様のアプローチを使用できます。交換するだけ バッシュ zsh

Zsh と Bash のどちらを選択する場合の考慮事項

  • 互換性と移植性 : Bash は、多くの Unix ベースのシステムのデフォルトのシェルです。これにより、クロスプラットフォーム スクリプティングにとってより安全な選択肢になります。スクリプトを変更せずに幅広いシステムで実行する必要がある場合は、Bash の方が良い選択肢です。
  • スクリプトの複雑さと高度な機能 : Zsh は、連想配列、拡張グロビング パターン、高度なパラメータ拡張などの高度な機能を提供します。これにより、複雑なスクリプト作成タスクが簡素化されます。スクリプトで高度な文字列操作やデータ構造が必要な場合は、Zsh を選択することをお勧めします。
  • コミュニティとプラグインのエコシステム : Bash と Zsh には両方とも活発なコミュニティがありますが、Zsh にはより強力なコミュニティと、プラグインとテーマの広範なエコシステムがあります。カスタマイズを重視する場合、Zsh の活発なコミュニティとプラグインのサポートは大きな利点となります。
  • 学びやすさ : シェル スクリプトを初めて使用する場合は、Bash がよりアクセスしやすい出発点となります。初心者向けに豊富なドキュメントとリソースが用意されています。これにより、シェル スクリプトの基本を簡単に学習できるようになります。

シェルスクリプトを使用したタスクの自動化

シェル スクリプトを使用してタスクを自動化する方法を知ることは非常に重要です。反復的なタスクを自動化し、時間を大幅に節約できます。

これらのスクリプトを使用して、ユーザー アカウントの管理、システム リソースの監視、データのバックアップ、定期的なメンテナンスの実行を行うこともできます。慎重に記述すれば、人的ミスの可能性も減らすことができます。