PR

【今更】 bash と zsh の違いについて網羅的にメモ

pc 備忘録
この記事は約7分で読めます。
記事内に広告が含まれています。

この記事では bash と zsh の主な違い、それぞれの特徴、移行するメリット、そして基本的な設定方法について解説します。

Linux や macOS などの UNIX 系 OS を使う上で、ターミナルとシェルは不可欠な存在です。

特に「bash(Bourne Again SHell)」と「zsh(Z Shell)」は、現代のシステム管理者やデベロッパーに広く使われている2大シェルと言えるでしょう。

bashとzshの基本情報

基本情報比較

項目 bash(Bourne Again SHell) zsh(Z Shell)
開発 Brian Fox氏によって1989年に開発されたGNUプロジェクトの一部 Paul Falstad氏によって1990年に開発
標準採用 多くのLinuxディストリビューションで長年デフォルトシェルとして採用 macOS Catalina(2019年)以降のデフォルトシェル
互換性 Bourne Shell(sh)の上位互換として設計 bash、ksh、tcshの機能を取り入れた拡張シェル
特徴 安定性と広い互換性を重視 高い拡張性とカスタマイズ性を持つ
スポンサーリンク

1. コマンド補完機能

bash zsh
基本的なタブ補完機能を持つ より高度で柔軟な補完システム
補完候補が複数ある場合は二度タブを押す必要がある 補完候補をインタラクティブに選択可能
大文字・小文字を区別する 曖昧な補完や誤字訂正機能を持つ
- 大文字・小文字を区別しない設定が容易
# zshの補完例
cd /u/l/b[TAB]  # 自動的に /usr/local/bin に展開される

2. グロビング(パターンマッチング)

bash zsh
基本的なワイルドカード(*, ?)をサポート デフォルトで拡張グロビングが有効
拡張パターンマッチングには shopt -s extglob が必要 再帰的なパターンマッチングが可能
- より柔軟な数値範囲指定が可能
# zshでの再帰的なファイル検索
ls **/*.txt  # すべてのサブディレクトリを含む .txt ファイル

# 数値範囲指定
echo {1..10}    # bashでも可能
echo {01..10}   # zshでは01, 02, ...と0埋め表示が可能

3. ヒストリ管理

bash zsh
基本的なコマンド履歴機能 共有ヒストリ(複数の端末間でヒストリを共有可能)
.bash_history ファイルに保存 タイムスタンプの保存
- より高度な検索機能
# zshでのヒストリ検索例
history -i  # タイムスタンプ付きで表示

4. プロンプトのカスタマイズ

bash zsh
PS1変数による基本的なカスタマイズ より柔軟なプロンプト設定システム
色やスペシャル文字の使用には特殊なエスケープシーケンスが必要 プロンプト拡張機能(右側プロンプト、複数行プロンプトなど)
- 組み込みの色名変数
- テーマシステム(Oh My Zshなど)
スポンサーリンク

5. プラグインとフレームワーク

bash zsh
基本的なプラグイン機構は存在しない 強力なプラグインシステム
拡張は主に .bashrc に関数やエイリアスを追加する形で行う Oh My Zsh, Prezto, Zinit などの人気フレームワーク
- 数千のプラグインとテーマが利用可能

6. スクリプト互換性

bash zsh
シェルスクリプトの事実上の標準 bash との高い互換性を持つ
最も広く使われ、多くのスクリプトが bash を前提に書かれている 一部の高度な機能は bash と互換性がない場合がある
- emulate bash コマンドによる互換モードがある

選択の基準

zsh に移行するメリット bash を選ぶ理由
生産性向上:
・より強力な補完機能
・高度なファイル操作
・効率的なヒストリ管理
広い互換性:
・ほぼすべてのUnix/Linux環境で利用可能
・スクリプトの互換性が高い
カスタマイズ性:
・見た目と使い勝手の広範なカスタマイズ
・豊富なプラグインエコシステム
シンプルさ:
・学習曲線がなだらか
・基本的な機能で十分な場合が多い
ユーザーフレンドリー:
・より直感的な操作感
・ミスに対する寛容性(typoの自動修正など)
デフォルト環境:
・多くのサーバー環境でデフォルト
・リモート接続時のシェル環境の一貫性
macOSとの整合性:
・macOS Catalina以降のデフォルトシェル
・Appleの公式サポート
-

基本設定方法

bash の設定

主要な設定ファイル

  • ~/.bash_profile: ログイン時に読み込まれる
  • ~/.bashrc: 新しいシェルを開くたびに読み込まれる

基本的な設定例

# ~/.bashrc
# エイリアス設定
alias ll='ls -la'
alias grep='grep --color=auto'

# ヒストリ設定
HISTSIZE=10000
HISTFILESIZE=20000
HISTCONTROL=ignoreboth

# プロンプト設定
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

# パス設定
export PATH="$HOME/bin:$PATH"
スポンサーリンク

zsh の設定

主要な設定ファイル

  • ~/.zshrc: 新しいシェルを開くたびに読み込まれる
  • ~/.zshenv: すべてのzshセッションで読み込まれる
  • ~/.zprofile: ログイン時に読み込まれる

基本的な設定例

# ~/.zshrc
# 基本設定
setopt autocd              # cdコマンドなしでディレクトリ変更
setopt interactive_comments # コマンドラインでコメントを使用可能に

# 補完設定
autoload -Uz compinit
compinit
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'  # 大文字小文字を区別しない

# ヒストリ設定
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt share_history       # 複数の端末間でヒストリを共有
setopt hist_ignore_all_dups # 重複コマンドを履歴に残さない

# プロンプト設定
autoload -Uz promptinit
promptinit
prompt adam1

# エイリアス
alias ls='ls --color=auto'
alias ll='ls -la'

bashからzshへの移行方法

  1. zshのインストール
# Debian/Ubuntu
sudo apt install zsh

# CentOS/RHEL
sudo yum install zsh

# macOS (Homebrew)
brew install zsh
  1. デフォルトシェルの変更
# ユーザーのデフォルトシェルを変更
chsh -s $(which zsh)
  1. 設定の移行
# 基本的なbash設定をzshに移植
grep "^alias\|^export" ~/.bashrc >> ~/.zshrc
スポンサーリンク

シェルスクリプトの互換性に関する注意点

bashとzshは多くの共通点がありますが、高度な機能を使用する場合は互換性の問題が発生する可能性があります。

シェルスクリプトを書く際に意識すべきことをまとめます。

  1. スクリプトの先頭に明示的なシェバン(#!/bin/bashまたは#!/bin/zsh)を記述
  2. 広い互換性が必要なスクリプトはbashまたはPOSIX shを使用
  3. zsh固有の機能を使う場合は、スクリプト内で明確にコメントする

(例)

#!/bin/bash
# このスクリプトはbashで実行することを想定しています

# bashの拡張機能を有効化
shopt -s extglob

# スクリプト本体
スポンサーリンク

おわりに

bashとzshはどちらも優れたシェルですが、それぞれ異なる長所と用途があります。

個人の作業環境にはzshの高度な機能が便利ですが、サーバー環境やシェルスクリプト開発では依然としてbashが重要な役割を果たしています。

自分の用途や優先事項に合わせて選択することをお勧めします。

最終的には両方のシェルに親しんでおくことで、どんな環境でも効率的に作業できるようになるでしょう。

コメント

タイトルとURLをコピーしました