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

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

チュートリアルを読んでいますが、次のコマンドを実行すると言われています。

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 Enter echo !$ Jar Enter Up Enter;そして

  • echo Foo Enter echo $_ Jar Enter Up Enter

(変更される文字は中間$!とのみです。)$_

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

後者の場合、を押すとUpコマンドラインが表示されますが、値が以前とは異なり、実際にはnowなので、 stdoutに作成さecho $_ barれた最後の行はnowです。$_$_JarJar Jar

別の結果は、_コマンドシーケンスなどの他のパラメータ拡張に使用できることです。

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

印刷isomorphism isosceles。しかし、同様の拡張子はありません${!$%morphism}

Bashの拡張手順の詳細については、以下を参照してくださいEXPANSIONman 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履歴ファイルに保存されます。

関連情報