Linuxユーザーとして、私は常にbashを使用しました。これは、使用したすべてのディストリビューションでデフォルトであったためです。BSDなどの他のUnixシステムを使用している人々は、他のシェルをはるかに頻繁に使用しているようです。もう少し学ぶために、zshを試してみることにしました。
bashユーザーとして:
- どの機能が恋しいですか?
- そして、私は何に注意する必要がありますか?
Linuxユーザーとして、私は常にbashを使用しました。これは、使用したすべてのディストリビューションでデフォルトであったためです。BSDなどの他のUnixシステムを使用している人々は、他のシェルをはるかに頻繁に使用しているようです。もう少し学ぶために、zshを試してみることにしました。
bashユーザーとして:
回答:
他のStack Exchangeサイトのトピックについては、すでにかなりの活動が行われています。覚えている限り(bashからzshへ)の切り替えの私の経験(何年も前²)で、私は1つのことを見逃していませんでした。私は多くを得ました。以下は、私が最もよく使用するシンプルなzsh固有の機能です。
zshの機能I私はたまにはbashを使用するほとんどのミスはautocdです:zshの中で、ディレクトリを実行すると、あなたがオンに提供し、それに変更することを意味autocdoption.⁴
別の非常に便利な機能は、派手なグロビングです。象形文字の文字は、(のように、それは同等書くことよりも、それらをルックアップするために頻繁に高速ですビット覚えにくいが、非常に便利なfindコマンド)。いくつかの簡単な例:
    foo*~*.bak=一致するfoo*ものを除くすべての一致*.bak
    foo*(.)=一致する通常のファイルのみ=一致するfoo*
    foo*(/)ディレクトリfoo*
    foo*(-@)のみ= 一致するぶら下がっているシンボリックリンクのみfoo*
    foo*(om[1,10])=一致する最新の10個のファイルfoo*
    foo*(Lm+1)= 1MBを超えるファイルのみ= ディレクトリ内およびそのすべてサブディレクトリ、再帰的に
    dir/**/foo*foo*dir  
派手な名前の変更には、zmvビルトインが便利です。たとえば、すべてfileをにコピーするにはfile.bak:zmv -C '(*)(#q.)' '$1.bak'
bashとzshの両方には、適切な完了システムがあり、明示的に(. /etc/bash_completionまたはautoload -U compinit; compinit)オンにする必要があります。Zshの方がはるかに構成可能であり、一般的にはより洗練されています。
なしでzshを実行すると.zshrc、構成オプションを選択できる対話型メニューが起動します。(一部のディストリビューションではこれが無効になる場合がありますautoload zsh-newuser-install; zsh-newuser-install。その場合は実行してください。)推奨される履歴オプションを有効にし、(「新しいスタイル」)補完を有効にし、を除く「共通シェルオプション」を有効にすることをお勧めしますbeep。後で、発見したオプションをさらに構成します。
² 当時、プログラム可能な完了はzshのキラー機能でしたが、bashはすぐにそれを取得しました。
b バージョン4でのみbashが取得した機能(多くのシステムではまだ利用できない)は、より小さなタイプです。
autocd上記で説明した機能をサポートするようになりました。コマンドを使用して機能を有効にしますshopt -s autocd。その後、機能は説明したとおりに機能します。
                    whereコマンドもありますが、コマンドと混同しないでくださいwhich。
                    -execとの選択のようなもののためのシェルのeなどのツールへのパイプラインsortとsedを書き換えeおよびソート)。もちろん、もっと冗長です。
                    また、デフォルトのタブ補完はbashよりも優れています...たとえば...
~/.e.dTABは~/.emacs.d/zshに展開され、bashはビープ音を鳴らします。
_-.ワイルドカードとして設定していることに気付きました。  zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' 。stackoverflow.com/q/7906078/311660を
                    zsh複数行コマンド(zsh line editorを参照)を編集できますが、bashは編集できません。同じトリック(Ctrl-p)を試みると、bashは最後のコマンドをフェッチします。
Bashには、次を使用してポートを開くことができるという機能があります。
/dev/tcp/host/portまたは
/dev/udp/host/portただし、(パスが実際に存在する場合)障害と見なされ、シェルが行うべき範囲外であるため、Debianでは無効になっています。詳細 [debianメーリングリスト]
whichbash のコマンドは、コマンドの場所のみを明らかにします。
Zsh では、whichanの定義、aliasaのソース、functionおよびコマンドの場所が明らかになります。
シェルエイリアスがあったとしましょう:
alias gg='git log'Bashでは、私たちが尋ねた場合:which gg結果は無効になります
Zshのでは:which gg私たちを与えるだろう...
gg: aliased to git logシェル関数があったとしましょう:
hello() {
    echo "Hello World"
}Bashで質問した場合:which hello結果は無効になります。
Zshのでは:which hello私たちを与えるだろう...
hello() {
    echo "Hello World"
}type(ビルトイン)コマンドを介して同じ機能を提供します。そして、ひと言で言えばwhich、外部コマンドであり、bash ビルトインではありません。
                    多くの場合、zshcontrib(1)1つを読むことで- と競合する2つのバージョンのautoload-able tetrisゲーム(もう1つは)を検出し、完全性を保つことができます(説明を参照)。ncurseszshemacs
=刺激を引き起こす可能性のあるキーワードに言及したいと思いcurlます(URLは通常?var=valそれらに含まれていますが、それは可能unsetoptだと思います):
q file =less(gentoo)解決するq file $(which less)= 問題のコマンドのフルパスに展開します。
他のことは、心の外で、正しいプロンプトRPS1=%d($PWDスタイルで表示する)、Alt + H(run-helpつまり、man)、Alt + ? (which-command)、、varedおよびzed(autoload関数)、Alt + Xウィジェットをバインドせずに実行するEmacsのミニバッファのようなもの、グローバルおよびサフィックスエイリアス、拡張された履歴追跡コマンド完了時間、-mおよび-regexマッチャー、シェルエミュレーション(例えばcsh、kshとemulate)およびautoload run-help組み込み関数のファイルスニペットを持ちます。
すべてではないにしても、ほとんどの機能はかなり前に実装されたもので、変更ログを読むと、大きな変更や新しい機能の追加はなく、非常に悲しいことです(これ以上探索したり発見したりするものはありません)。
bash(とは対照的に)およびlinuxの精神により多く分布しているようです。たとえば、bash-specificによってオーバーライドされない場合、readline関数とキーバインドは(andに保持されているように)グローバルに適用できます。readlinezlegnu history~/.inputrc/etc/inputrcbind
私は個人的にemacs(特に(現在の?)emacs-noxフレーバーの見通しから)のような例外的なソフトウェアのインスピレーションであるzshとtmux考え、そのような実装の例として非常に良い仕事をしました。その価値を評価する人々のために(Xサーバーを必要としない/依存しないレベルまで)。Unixシェルは十分に強力であり、その継続性と一貫性は適切なワークフローと生産性(コンピューティング全体で)に十分です。