以下の bash コマンドの !# (感嘆符ハッシュ)、!$:r:r (感嘆符ドルコロン r)、!#:t (感嘆符ハッシュコロン t) はどういう意味ですか?

以下の bash コマンドの !# (感嘆符ハッシュ)、!$:r:r (感嘆符ドルコロン r)、!#:t (感嘆符ハッシュコロン t) はどういう意味ですか?

私はNagiosパッケージをインストールしようとしていたのですが、ガイドでこれらの奇妙なbash拡張を見つけました。ここ誰か、拡張が何を意味するのか教えてくれませんか? ウィキリンクがあれば、今後の参考になります。

root@z:~> wget http://mathias-kettner.de/download/check_mk-1.1.7i5.tar.gz
root@z:~> tar zxvf !#:t
root@z:~> chown -R root:root !$:r:r && chmod -R o-w !$:r:r && cd !$:r:r
root@z:~/check_mk-1.1.7i5> ./setup.sh

答え1

これらはbash履歴拡張キーワードシェルの履歴から行を選択し、変更後に可能であればその行(の一部)を再挿入します。リンク先のサイトでは、これらの説明は適切に行われていますが、すべてについて説明されているわけではありません。

tar zxvf !#:t

実際には意味がありません。!#これまでに入力した行を選択しますが、tar zxvfそれを再利用したくありません。

tar zxvf !$:t

!$これは、 に与えられた URL である前の行の最後の部分 ( ) を選択しwget、ファイル名の部分 (:t末尾の 、厳密に言えば最後のディレクトリ区切り文字 の後に残っている部分であり、/これは URL でうまく機能します) を取得します。

それから

chown -R root:root !$:r:r

は、前の行の最後の部分を選択し、ファイル拡張子 ( :r— 厳密に言えば、最後の の後の ) をすべて削除します (.も含む.)。これにより、ディレクトリ名が生成されます (tarball に、tarball のベース名と同じ名前のディレクトリが含まれていると仮定します)。 コマンドchmodcdコマンドは同じように処理されます。

関連情報