web-dev-qa-db-ja.com

ターミナル交換!コマンド付きの数字が続く

私はubuntuターミナルセッションについて非常に混乱しています。!で始まり、一見ランダムなコマンドで番号が続くコマンドのセクションを置き換えるようです。 !87でそれをscreen -lで置き換え、さらに!88で置き換え、lsで置き換えます。

なぜこれが起こっているのか、どんなアイデアでも大歓迎です。

12
usbpc102

それはbashの履歴展開です。

!87

履歴行87からコマンドを再実行します。

この機能の説明は man bash のセクション「HISTORY EXPANSION」にあります。

       An  event  designator  is  a  reference  to a command line entry in the
       history list.  Unless the reference is absolute, events are relative to
       the current position in the history list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob Shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command minus n.

したがって、最後のコマンドをすばやく呼び出すには、!-1を実行し、5番目の最後のコマンド!-5を実行します。 !-1の便利な同義語は!!です。たとえば、 apt install somethingSudoを忘れた場合は、Sudo !!を実行するだけで十分です。

履歴拡張文字を引用できるのは、バックスラッシュ(\)と一重引用符のみです。

履歴の展開を回避するには、感嘆符をバックスラッシュ(\!)でエスケープするか、一重引用符('!')を使用する必要があります。

20
dessert