
チュートリアルを読んでいますが、次のコマンドを実行すると言われています。
sudo chmod 700 !$
私は慣れていません!$
。どういう意味ですか?
答え1
デフォルトでは、前のコマンドの最後のパラメーターです。
!$
前のコマンドの「終了」です。次の例を考えてみましょう。まず、ファイル内の単語を探します。grep -i joe /some/long/directory/structure/user-lists/list-15
joeがユーザーリストにある場合、私たちは彼を削除したいと思います。長いディレクトリツリーを引数として使用してviを起動するか、単に
vi !$
which bashが次に展開されるかのように起動することができます。vi /some/long/directory/structure/user-lists/list-15
(源泉;それでも便利なガイド)
!$
このフラグと特殊シェル変数の区別は意味がありません$_
。もちろん、両方前のコマンドの最後のパラメータに展開します。しかし!$
その間に拡張歴史的拡張、$_
拡張中パラメータ拡張。これの重要な結果!$
は、次を使用するときです。拡大するコマンドが履歴に保存されます。
たとえば、キーストロークを考えてみましょう。
echo Foo
Enterecho !$ Jar
Enter Up Enter;そしてecho Foo
Enterecho $_ Jar
Enter Up Enter。
(変更される文字は中間$!
とのみです。)$_
前者では、を押すとUpコマンドラインが読み取られるため、echo Foo Jar
stdoutに書き込まれる最後の行はですFoo Jar
。
後者の場合、を押すとUpコマンドラインが表示されますが、値が以前とは異なり、実際にはnowなので、 stdoutに作成さecho $_ bar
れた最後の行はnowです。$_
$_
Jar
Jar Jar
別の結果は、_
コマンドシーケンスなどの他のパラメータ拡張に使用できることです。
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
印刷isomorphism isosceles
。しかし、同様の拡張子はありません${!$%morphism}
。
Bashの拡張手順の詳細については、以下を参照してくださいEXPANSION
。man 1 bash
シェル拡張オンライン版では)。このHISTORY EXPANSION
セクションは別個です。
答え2
技術的には、!$
履歴リストの最後のコマンドの最後の単語です。
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
答え3
!$
その特定のユーザーが使用した最後のコマンドを提供します。
commandを使用して、以前に使用したコマンドの履歴を見つけることもできますhistory
。一度試してみてください...
注:特定のユーザーに対して以前に使用したすべてのコマンドは、bash履歴ファイルに保存されます。