bashエイリアスは行の先頭でのみ機能しますか?

bashエイリアスは行の先頭でのみ機能しますか?

まず、走ったtouch file.txt

次に、次のコマンドを実行しました。

alias xx="file.txt"
vim xx

予想される動作: vim ロードfile.txt。実際の動作:vimは新しいファイルをロードしますxx

なぜ?エイリアスは行の先頭でのみ機能するためですか?たとえば、私が入力した場合

xx

その後、交換を実行して出力しますzsh: command not found: file.txt。したがって、この場合はエイリアスが機能します。

ベストアンサー1

一般的なエイリアスは、またはbash(代わりにzsh使用しているように見えるシェル)でbashコマンドのエイリアスを指定することを意味;します。 ..など、または値が空白で終わるエイリアスの後ろに。|&&&ifthenelsewhile

後者は次のようにすることができます。

alias sudo='sudo '
alias ll='ls -l'

次に、次のようにします。

sudo ll

シェルの場合sudo ls -l

それにもかかわらずzsh、あなたはまたグローバルエイリアスは次のとおりです。

alias -g xx=file.txt

次に、区切り文字で見つかった場所xxに移動しますfile.txt(引用符を削除する前)。

echo xx

これが実行されますecho file.txt。エイリアスはecho xxyまたはから拡張されませんが、echo "xx"次のこともできます。

alias -g '"xx"=hello; echo world'

その後、これら2つのコマンドecho "xx"に変更して実行します。echo hello; echo worldecho

ここでは、別名ではなく変数を使用したいようです。

xx=file.txt
vim "$xx"

(Bashでは引用符が必要で、zsh短縮できますvim $xx。)

エイリアスは、機能のない1970年代後半のシェルであるcshの機能です。 bashやzshなどのBourne様シェル(bashとzshは、cshのほとんどの機能を借りた2つのBourne様シェルであるalias forever='while true; do'にもかかわらず)機能が利用できない特定の場合(たとえば、alias fail='return 1'...


1も1970年代後半のBourneシェルには元々機能やエイリアスはありませんでしたが、1983年頃の直後に機能が追加されました。他の機能を備えたシェルであるcshの人気は、エイリアスとレコード拡張(そしてこれがフリーソフトウェアであるという事実)に大きく貢献しました。大きな欠陥)これらの機能が他のBourneに似たシェルでも機能する理由を説明します。エイリアス(歴史的拡張ではない)は、sh(kshベースのサブセット)のPOSIX仕様にも含まれていました。このようなエイリアスで通常の言語を定式化することはほとんど不可能であるため、メンテナンス者は非常に残念です。試してみました。そこからそれらを浅く見なさい

おすすめ記事