チュートリアルをフォローしていますが、次のコマンドを実行するように指示されています:
sudo chmod 700 !$
私は!$
に精通していません。どういう意味ですか?
コメント
回答
基本的には、 「は前のコマンドの最後の引数です。
!$
は前のコマンドの「終了」です。 。次の例を考えてみましょう。ファイル内の単語を探すことから始めます。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ネットワークで感謝の気持ちを表す方法です。を参照してください。 "
のようなものを検索するのは難しいです。
公式"スタンス。
回答
厳密に言えば!$
は、履歴リストの最後のコマンドの最後の単語です。
word-シェルによって1つの単位として扱われる一連の文字。単語に引用符で囲まれていないメタ文字を含めることはできません。
メタ文字-引用符で囲まれていない場合に単語を区切る文字。メタ文字は空白または次の文字のいずれかです: |、 &、 ;、 (、 )、 < 、または >
空白-スペースまたはタブ文字。
例:
set -o history # enable command history set -o histexpand # enable ! style history substitution HISTSIZE=10 # save all lines on the history list HISTCONTROL= HISTIGNORE= date echo !$ # prints date date>/dev/null echo !$ # prints /dev/null echo a b c>/dev/null echo !$ # prints /dev/null HISTCONTROL=ignorespace # lines which begin with a space character are not saved in the history list echo a b c echo d e f # space at the beginning echo !$ # prints c
コメント
回答
!$
は、最後に使用したコマンドを表示しますその特定のユーザーの場合….
history
コマンドを使用して以前に使用したコマンドの履歴を確認することもできます…試してみてください…。
注:特定のユーザーの場合、以前に使用したすべてのコマンドはbash履歴ファイルに保存されます。
コメント
- 他の答えは正しいです。これは間違っています。
echo
何か'それが何をするかわからない場合'。echo $(rm -rf /)
--no-preserve-root
オプションが必要です。"という単語が表示された場合は"プログラムでは、その機能について慎重に検討することをお勧めします。