!cp:$何をしますか?

!cp:$何をしますか?

私が取り組んでいるプログラムのドキュメントで次のコマンドを見ました。

cp company-sso /usr/local/bin/company-sso ; sudo chmod +x !cp:$

:これにより、次のコマンドが実行されず、評価のみが行われることがわかりますが、どのように機能しますか$? or$などの変数名の前にのみ使用されることを見たことがありますが、単独で使用されたことはありません。また、どのように動作しますか?実行できませんか?これの目的は何ですか?このライン全体は意味がありますか?$USER$HOME!cpcp

ベストアンサー1

これは歴史的拡張、紹介として!$この文脈で解釈されるべきです。!cp:$で区切られた2つの部分があります:!cpは、「で始まる最新のコマンドを見つける」を意味するイベントインジケータですcp$「選択したコマンドの最後の単語(引数)を取得します」を意味する単語インジケータ。

したがって、履歴の最後の命令(以前に実行された命令)もあったと仮定し、に置き換えると、実行cp company-sso /usr/local/bin/company-ssoされた命令はです。!cp:$/usr/local/bin/company-ssosudo chmod +x /usr/local/bin/company-sso

〜のように言及する渡すジェシフ、履歴拡張は文字列に一致する以前のコマンドを検索するときに現在のコマンドラインを考慮しないため、質問の両方のコマンドが同じ行に入力された場合、以前のコマンドcp;候補ではありません。これは、あなたの質問に与えられたコマンドが2つの別々の行としてのみ有用であることを意味します。

cp company-sso /usr/local/bin/company-sso
sudo chmod +x !cp:$

:次のコマンドの実行が停止し、評価のみが行われます。」コマンドとして使用されている場合にのみ、コマンドラインの他の場合:には適用されません。なぜなら、コマンドは::特殊内蔵ハウジング、引数を無視して常に成功しますが、引数の拡張を行い、特殊な組み込み規則に従うと変数の割り当ても維持されます。 (Bashはデフォルトではこのルールを適用しません。)

おすすめ記事