macOS 10.15 Catalina でターミナルのやつが zsh になった

デフォルトのシェルが bash から zsh というものになったそうだ。
 zsh は bash の上位互換だそうで、つまり良きものなのだろう。

zsh を使ってみる

Mojave から Catalina へのアップグレードした場合だと bash がまだ生き残っている。すぐには zsh にならないのだ。
 ターミナルを立ち上げると次のようなメッセージが表示される。

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.

よくわかんねーながらもchsh -s /bin/zshってのをやれって書いてある気がするのでやってみる。
 と、そこはもう zsh。
 読み方もわかんねーような世界に来てしまった。雑種、みたいな発音で大丈夫だろうか。

zsh には入力補完というのがある。
 試しにcdの後ろに半角スペースを入力してからtabキーを押してみる。

tabキーをを押すたびに、カレントディレクトリのなかにある、移動先の候補を補完してくれる。これ、すごい便利だ。

 もうひとつcontrol+rキーを押すとイクリメンタル・サーチで過去の履歴を検索できちゃう。

control+rで後方検索、contro+sで前方検索になるとのこと。
 これもかっこいい。

ちなみに、ターミナルの「環境設定」>「一般」タブ>「開くシェル」の欄で、bash に戻すこともできる。「コマンド」を選択し、完全パスを/bin/bashにすれば OK。

bash との違い

そもそも bash との違いはあまりないみたいだ。
 筆者が使ってるだいたいのシェルスクリプトが動く、と思う。
 ただ、ひとつ大きく違うのは配列の開始番号だ。

zsh の配列は 0 ではなく 1 から始まるらしい。
 こちらの、Catalinaでデフォルトシェルが「zsh」に変わる、bashとの違いは? – 新・OS X ハッキング!(241) | マイナビニュースの記事を例文をそのまんまシェルスクリプトにしてみた。

📝 zshtest.sh

#!/bin/bash

array=(apple orange peach)
for i in `seq 0 3`; do
    echo "array[$i] = ${array[$i]}"
done;

一行目を#!/bin/bashにして試してみる。

$ zshtest.sh
array[0] = apple
array[1] = orange
array[2] = peach
array[3] = 

array の先頭は 0 番目になっている。
 次に一行目を#!/bin/zshにしてふたたび実行。

% zshtest.sh
array[0] = 
array[1] = apple
array[2] = orange
array[3] = peach

今度は先頭が 1 から開始されている。これは覚えておいたほうがよさげ。

zshrc などの設置

bash_profile とかで書いたものがあれば、それを zsh でもほぼ流用できる。
 こういう冴えたやり方が紹介されていた。

cat .bash_profile >> .zprofile

プロンプトの書き方だけは違う。

zsh の設定ファイルは、.zshenv > .zprofile > .zshrc > .zlogin の順番で読みこまれる。違いはよくわからないが、プロンプトの設定は zshrc に書かないと反映されなかった。

筆者はパスは .zshenv に書いた。

export PATH=$PATH:~/bin:/usr/local/opt

zshrc にプロンプトとかエイリアス、関数を書いた。

PROMPT='%K{cyan}%T%k %n@%m %F{yellow}%~%f
%F{green}[>_ ] >%f '

alias zrc='open -a CotEditor ~/.zshrc'

dict(){
    open dict://$1
}

プロンプトの書き方は下の記事が詳しい。
 参考にさせていただきました。ありがとうございます。

🔗 とりあえずZshを使えば良いんだろう? – Qiita