感嘆符が付いているエコー出力を理解する

感嘆符が付いているエコー出力を理解する

echo $$私もしばらく前に遊んでいました。まあ、これはシェルのpidを示しています。しかし、私がやったので、echo !すぐに登場しました!それecho !!から

echo echo !
echo !

$echo !!!ジュン

echo echo echo !!
echo echo !!

出力がわかりません。私が知る限り、echo !!シェルで最後に実行されたコマンドが提供されます。しかし、ここで得られる結果は奇妙に見えます。私はbashシェルを使います。

答え1

これ歴史的出来事指標 !!履歴の最後のコマンドに置き換えられました。 Bashは最初にコマンドの実行方法を印刷してから実行します。

例:

$ foo
foo: command not found
$ !!
foo                     # command to be executed
foo: command not found  # result of execution

あなたの場合:

$ echo !
!
$ echo !!
echo echo !         # command to be executed
echo !              # result of execution
$ echo !!!
echo echo echo !!   # command to be executed
echo echo !!        # result of execution

イベントインジケータを持つコマンドは、入力したとおりに履歴に挿入されません。最初にイベントインジケータが展開され、次にコマンドが履歴に入力されます。そのため、3番目のコマンド(echo !!!)では、イベントインジケータがecho !!(2番目のコマンド入力)ではなくecho echo !(2番目のコマンド拡張)に置き換えられます。

交換した部品が強調表示された最後のコマンドは次のとおりです。

$ echo (!!)!
echo (echo echo !)! # command to be executed
echo echo !!        # result of execution

答え2

!!使うなら交換済み頼る最後のコマンドシェルから、だから最初の行それ交換マーク echo echo !そして第二一つは出力 echo !

関連情報