zshと比較したbashのユニークな機能


67

私はかなり長い間(そのtcshの前で、そのcshの前で)zshユーザーでした。私はこれに非常に満足していますが、zshには存在しないbashの魅力的な機能があるかどうか疑問に思っていました。そして逆に、bashには存在しないzsh機能があります。私の現在の感じは、bashの方が良いということです。

  • すでに慣れていて、新しい構文を学びたくない場合。
  • デフォルトでは、ほとんどすべての* nixマシンに存在しますが、zshは追加インストールになる場合があります。

ここで宗教的な戦いを始めようとしないので、シェルの1つだけに存在する機能を探しています。


10
どちらかの主観に固有の機能はどのように主観的ですか?正直に言って、フレームウォーを探しているわけではなく、どちらか一方に慣れていることがそのシェルを好む十分な理由であると認めています。
ティム

回答:


40

zshはバルカン用です。;-)

真面目な話:bash 4.0には、以前はzshでしか見られなかった、**グロビングのような機能がいくつかあります。

% ls /usr/src/**/Makefile

以下と同等です:

% find /usr/src -name "Makefile"

しかし、明らかにより強力です。

私の経験では、bashのプログラム可能な完了は、少なくともいくつかの場合(たとえば、aptitudeでdebianパッケージを完了する)で、zshの実行よりも少し良くなります。

bashはAlt + .挿入する必要があります!$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>

for this. zsh can also expand a command in backtics, so

% cat `echo blubb | sed 's/u/a/'`<Tab>

yields

% cat blabb

I find it very useful to expand rm *, as you can see what would be removed and can maybe remove one or two files from the commmand to prevent them from being deleted.

Also nice: using the output from commands for other commands that do not read from stdin but expect a filename:

% diff <(sort foo) <(sort bar)

From what I read bash-completion also supports completing remote filenames over ssh if you use ssh-agent, which used to be a good reason to switch to zsh.

Aliases in zsh can be defined to work on the whole line instead of just at the beginning:

% alias -g ...="../.."
% cd ...

8
bashで、C-M-e展開することになる、「シェル・ラインを拡大」することcat `echo blubb | sed 's/u/a/'` cat blabbしてecho $SHELLまでecho /bin/bash私の場合。また、C-x *展開する「glob-expand-word」へrm *
ビクター

16

bashは、FreeBSD、OpenBSD、またはNetBSDにはデフォルトでインストールされておらず、Solaris 10(OpenSolarisがデフォルトになっています)にもデフォルトでインストールされていないこと、前回AIXを使用したこと、およびHP-UXサーバーもデフォルトではインストールされませんでした。

また、OpenSolarisでは/ bin / shはbashではありません。kshです。私がソフトウェアポーターとして抱えている最大の問題は、/ bin / shがbashであり、bash拡張構文を受け入れると想定している人々です。これはほとんどのLinuxディストリビューションに当てはまるようですが、他の場所には当てはまらず、本当に迷惑です。


6
はい、あなたは正しいです。残念ながら、これらのベンダーはすべて、bashを追加パッケージとして非常に簡単にインストールできるようにします。スクリプトで/ bin / sh purismの必要性を指摘した+1。
クバンチク2009

@kubanczyk:rootアクセスのないマシンで作業している場合、インストールはそれほど簡単ではないかもしれないので、X-Istenceのポイントは立っていると思います。(私は多数のSolarisボックスで作業しており、システム管理者はすべてkshのジャンキーです。最後に、私がなければ生きられない自分のソフトウェア(この場合はgit)をコンパイルしようとしました。そのルートは私に切断されました。)
iconoclast

12

私はbashユーザーですが、zshの機能の1つであるRPS1が非常に優れていることがわかりました。

覚えておいてください:

  • PS1:左揃えのプロンプト
  • RPS1:右揃えのプロンプト

サンプル:

のようなものを使用する場合

PS1=’%B(%h) %m%#%b 
RPS1=’(%20<…<%~)'

左側にプロンプ​​トが表示され、現在のディレクトリが右側にプッシュされます。現在の行が長くなりすぎると消えます!これは、zshがRPS1に低い優先度を与えるのに十分なほどスマートだからです。

この例のスクリーンショットはhttp://imgur.com/OAZhCで見ることができます。


9

Zshにはスペル修正があります。あなたが手紙(またはそれ以上)であるなら、それはあなたが何を意味したかを理解するでしょう。

また、より堅牢なタブ補完機能もあります。

Zshにはインタラクティブな設定ユーティリティがあり、好きなように設定できます。

一部の速度テストでは、zshの方が高速であると言われていますが、違いに気付いていません。


1
機能のサブセットのみをサポートし、高速で実行する必要のあるスクリプト(たとえば、起動スクリプト)で使用するように設計されたダッシュの簡略版はダッシュです。
チャッキー

zshDvorakキーボードを使用する場合、「1文字オフ」の誤入力を許可する設定もあります。
vgoff

6

zshがサポートしていないbash機能については知りません。zshの設計目標には、bashが追加する機能のサポートが含まれるようです。

私はまだzshの代わりにbashを使用しています。bshがサポートしていないzshがサポートする魅力的な機能に出会うことはめったにありません。長年にわたるzshの問題、または特定のsysetmsには存在しない問題により、移行する価値はありませんでした。

ようやくすべてのUnixシステムで同じシェルを使用できるようになりました。決して使用しない機能のためにこれを壊す価値はありません。

bshに存在しないzshに存在する機能は、ほとんどがかわいいように見えますが、日常的に重要な機能ではありません。


3

bashには、zshにしかなかった多くの機能があります。最近のubuntuユーザーが発見したように、今ではbashで「スマートタブ補完」もできます。


1

プロセス置換と拡張グロビングは、私が最も見逃している2つの機能です。プロンプト設定も非常にクールです-コマンドラインで複雑なステートメントを入力しているときにネストのレベルを確認します。自動ロードにより、すべてのシェルに多くの関数を含めることが可能になります。


あなたが言及したすべてのことはzshに含まれているので、私はあなたがzshからそれらを見逃すことを意味すると思いますか?(しかし、彼らはすべてbashを欠いていると確信していますか?それは私を驚かせるでしょう。)いずれにしても、bash / zshフェンスの両側に答える人がいるので、それを追加すると答えが明確になります。また、これらの各機能がシェルライフを簡単にする方法の例を挙げておくと役立ちます。
iconoclast

0

私はviモードをサポートしているためzshのファンですが、zshがあまり広く使用されていないことを発見しています。zshは他のシェルから人気のある機能を取り出して組み合わせるのが好きだと思います(そのため、bashに固有のものとcshに固有のものは両方ともzshで利用可能です)。

誰かが、私はzshを使用してオタクの要素を曲げていると言いましたが、その噂を確認または否定することはできません。


5
はい、bashはviモードもサポートしています。
pjz 2009

@Milner:bashではないzshでのviモードのサポートの種類を説明できますか?コマンドラインで-o viを設定する機能を単に意味する場合、それは明らかに両方にあります。zshに何らかの拡張サポートがある場合、それが何であり、何が追加されるかを明確に説明してもらえますか?
iconoclast

-1

人気、#bash 430ユーザー。#zsh 123ユーザー。zshのWebサイトでは、zshと他のシェルとの優れた比較があると思います。zshのviモードのサポートが向上しています。


2
zshのviモードはどのように改善されていますか?私はbashユーザーであり、viモードをオンにしているので、切り替えにメリットがあるかどうかを知りたいです。
ptman

1
@ptman:zshのプロンプトは、モード(挿入/通常)を知らせるように作成できます。Readlineではできません。プロンプターもより柔軟です:構文の強調表示などを行うことができます!
unperson325680

@progo:ああ!非常に素晴らしい。これで、zshでviモードの使用を開始できます。これは、これまでemacsモードに固執する私の理由の1つです。
iconoclast

@Brandonは、ほとんど機能強化されていなかったため、シェルを切り替える必要がありました。
unperson325680

-1

Bashは、コマンドラインの/ bin / shスクリプトで使用できるifとwhileに同じ構文を使用しています。
zsh内では構文が異なります。コマンドラインでifまたはwhileステートメントを使用している場合、zshを効果的に使用するには両方を覚えておく必要があります


1
if [[ $test = "test" ]]; then echo "success"; else echo "failure"; fiはコマンドラインとスクリプトの両方でこれを試してみましたが、どちらの場合でも期待通りに機能しました。だから、あなたはあなたの事実をまっすぐに持っていないように見えるでしょう。
iconoclast

これは、/ bin / shとしてインストールしたものによって異なります。/ bin / shがbashである場合、その通りです。それ以外の場合、bashにはこの利点はありません。zshが/ bin / shの場合、zshにはこの利点があります。/ bin / shを提供できるすべての異なるシェルを考えると、シェルスクリプトに必要なシェルを使用することを個人的にお勧めします。これにより、その不在は、解決します。
エドグリム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.