まず、走った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
コマンドのエイリアスを指定することを意味;
します。 ..など、または値が空白で終わるエイリアスの後ろに。|
&
&&
if
then
else
while
後者は次のようにすることができます。
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 world
echo
ここでは、別名ではなく変数を使用したいようです。
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仕様にも含まれていました。このようなエイリアスで通常の言語を定式化することはほとんど不可能であるため、メンテナンス者は非常に残念です。試してみました。そこからそれらを浅く見なさい