zshのエイリアスとbashのエイリアスの違い


9

調べてみましたが、決定的なものは見つかりませんでした。zshのエイリアスコマンドとbashのエイリアスコマンドに違いはありますか?そうでない場合は、2つのシェル間で一連のエイリアスを共有して、意図したとおりに機能することを期待できるということですか?

回答:



13

aliasコマンドの構文は、すべてのBourneスタイルのシェルで同じです。あなたがそれらを全体で共有することができますので~/.zshrc~/.bashrc~/.kshrc~/.shrc、限り、彼らはすべてのシェルで意味をなすよう。

すべてのシェルでサポートされている構文のサブセットを使用する限り、同じことが変数定義と関数定義にも当てはまります。

4.0より古いバージョンのzshを使用しない場合は、シェルに依存しないすべての定義を(たとえば)というファイルに入れることができます。~/.common.rc.sh最初の行は

emulate -LR sh 2>/dev/null

これにより、zshはこのファイルでのみsh互換の構文を期待するようになります。そして、ソースの先頭に近いファイルという~/.bashrc~/.bashrc~/.kshrcというように。

これは基本的に私がすることです。例えば、私はのエイリアスを生成し、やや複雑なコード持っているls(利用できるものに応じて私の好きなオプションを備えた--color-G-F、など)。それはそうで行く、シェルに依存しないのです.common.rc.sh。以下のように私はまた、シェル依存の別名を持つalias zcp='zmv -C'ことがで行きます.zshrc


1
/bin/shaliasesファイルの先頭にシバンを配置すると、すべてのシェルで意図したとおりに機能しますか?
Zameer Manji、2011

1
@ZameerManjiいいえ、#!行を入れないでください。これはスタンドアロンスクリプトではなく、別のスクリプトでのみソースを取得できます。#!とにかく、シェルの動作を変更しません。
Gilles「SO-悪をやめる」

3
私が見つけた小さな違いは、zshがalias最初の引数を+オプションのようなものとして扱うため、zshのように記述-するalias +=something必要があることですalias -- +=somethingemulateそれを変えるとは思わないでください。
ミケル

~/.shrcBourne Shellは最も強力なエイリアス実装を持っていzshますが、互換性のないオプション名を使用しているので注意してください。Bourne Shell alias -gで永続的なエイリアスを作成します$HOME/.globals。エイリアス定義の共有は、POSIX機能のみを使用する場合にのみ安全です。
schily

2

zshさんはalias一方で、グローバルエイリアスを可能にするbashのが唯一の行の先頭に展開されます。

zsh

alias -g L="| less -FRX"

その後、次のことができます。

verbose-command L

役立つグローバルエイリアスのリストについては、こちらをご覧ください。


すべての拡張エイリアスを「グローバル」エイリアスと呼ぶのは、特定のディレクトリに制限されるローカルエイリアスの概念がある一方で、38年間のグローバルエイリアスは、部門に依存しないエイリアスに適用されるため、非常に悪い考えです。このコンセプトは、1980年にUNOSから出されたもので、6年以来ボーンシェルに実装されています。UNOSは1980年にもすべての拡張エイリアスを導入しましたが、zshはこの種の衝突を回避するための調査を行った可能性があります。schillix.sourceforge.net/man/man1/bosh.1.htmlを
schily
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.