!$はどういう意味ですか?

チュートリアルをフォローしていますが、次のコマンドを実行するように指示されています:

sudo chmod 700 !$ 

私は!$に精通していません。どういう意味ですか?

コメント

  • 'は一般的にecho何か'それが何をするかわからない場合'。
  • @Shadur、常にではありません。 echo $(rm -rf /)
  • @cjm '本当に古いシステムを使用していない限り、'そこに--no-preserve-rootオプションが必要です。"という単語が表示された場合は"プログラムでは、その機能について慎重に検討することをお勧めします。
  • @WChargin "本当に古い"と" Linuxではない/ GNUcoreutilsを使用していない"は同じものです。 ' t。

回答

基本的には、 「は前のコマンドの最後の引数です。

!$は前のコマンドの「終了」です。 。次の例を考えてみましょう。ファイル内の単語を探すことから始めます。

grep -i joe /some/long/directory/structure/user-lists/list-15 

joeがそのユーザーリストに含まれている場合は、そのユーザーリストから削除します。 。引数としてその長いディレクトリツリーを使用してviを起動するか、vi !$どのbashを次のように展開するかを選択できます。

vi /some/long/directory/structure/user-lists/list-15 

ソース;ちなみに便利なガイド)


この!$トークンと特別なシェル変数$_を区別する価値はありません。 。実際、両方は前のコマンドの最後の引数に展開されます。ただし、!$履歴拡張中に拡張され、$_パラメータ拡張中に拡張されます。 em>。この重要な結果の1つは、!$を使用すると、 Expanded コマンドが履歴に保存されることです。

たとえば、キーストロークを検討してください

  • echo Foo 入力 echo !$ Jar Enter Up Enter ;および

  • echo Foo 入力 echo $_ Jar Enter Up Enter

(変更された文字は$!$_が中央にあります。)

前者では、 Up を押すとコマンドラインが表示されます。 echo Foo Jarを読み取るため、stdoutに書き込まれる最後の行はFoo Jarです。

後者の場合、<を押すとkbd> Up の場合、コマンドラインはecho $_ barと表示されますが、$_の値は以前とは異なります。実際、 $_Jarになっているため、stdoutに書き込まれる最後の行はJar Jarです。

別の結果として、_は、コマンドのシーケンスなど、他のパラメーター展開で使用できるようになります

printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles 

prints isomorphism isosceles。ただし、類似の「${!$%morphism}」拡張はありません。

Bashの拡張フェーズの詳細については、EXPANSION

セクション(オンライン版ではシェル拡張と呼ばれます)。HISTORY EXPANSIONセクションは別です。

コメント

  • いいですね。知っておいてください。また、そこに良いこともあります'スタック交換。' Googleで!$
  • のようなものを検索するのは難しいです。

  • BTW、コマンドラインで、前のコマンドの最後の引数をinsert-last-argumentで挿入できます。通常は、M-.にバインドされます。
  • @Andrewは、質問に答える場合はこれを受け入れることを忘れないでください。コメントを投稿するのではなく、受け入れることと賛成することは、SEネットワークで感謝の気持ちを表す方法です。を参照してください。 "

公式"スタンス。

  • @Andrew参考までに、Googleで"バッシュバングドルを検索しました"そして、このリンクを3番目のリストとして含めて、まともな結果を得ました。
  • @terdon昨夜答えを受け入れようとしましたが、速すぎて受け入れるのを待つことを余儀なくされました。
  • 回答

    回答

    !$は、最後に使用したコマンドを表示しますその特定のユーザーの場合….

    historyコマンドを使用して以前に使用したコマンドの履歴を確認することもできます…試してみてください…。

    注:特定のユーザーの場合、以前に使用したすべてのコマンドはbash履歴ファイルに保存されます。

    コメント

    • 他の答えは正しいです。これは間違っています。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です