$_と!$の違いは何ですか? [コピー]

$_と!$の違いは何ですか? [コピー]

私はいつも前の!$コマンドの最後の引数を引用しました。

例えば

~/dir » mkdir birthday
~/dir » cd !$
~/dir » cd birthday

$_しかし、代わりに使用されるチュートリアルが見え始めました。!$

どちらもテストしましたが、唯一の顕著な違いは微妙ですが、クリックする前に出力を確認させながら$_コマンドを評価して実行するようですが、それと?!$Enter$_!$

更新:重複としてマークしますか?この質問は、質問に許可された回答を提案することで回答できますが、これは回答が質問が要求するよりも詳細なためです。

検索_$ とはどういう意味ですか?提案のコピーを作成しますが、実行したことを尋ねる前に既に知っていて、!$この質問が他の質問にも回答されることを示すものはありません。

ベストアンサー1

実行man bashと検索セクション特殊パラメータ。あなたが見つけることができるので_

前のコマンドの最後の引数に展開されます。拡張後

より詳細なバージョンは次のとおりです。

前のコマンドで最後に受け取った引数に拡張します(つまり、シェル拡張を実行した後)。

もっと説明するよりも、いくつかの例を見るのは本当に役に立つと思います。

実施例1

$ echo "$(date +%s)" # %s is seconds since epoch
1536984661
$ echo $_ !$ "$(date +%s)" # don't hit enter until a few seconds pass
1536984661 1536984665 1536984665

$_以前に渡された実際の値が取得されるため、過去の秒echo単位の値として解決されます。さらに、以降は!$単に次に置き換えられます。タイプされた最後の引数の値、つまり"$(date +%s)"後続の引数と同じ後の時間で確認されます。

実施例2

$ foo='a b c'
$ echo "$foo"  # expands to single arg: 'a b c'
a b c
$ echo "$_"
a b c
$ #---------
$ echo $foo    # expands to three args: a b c
a b c
$ echo "$_"
c

2番目の応答$fooでは引用されていません。したがって、echo変数/引数の拡張とトークン化を介して渡されます。これらの拡張/分割結果は次のとおりです。第二そして3つの個別の引数として渡され、私たちが見る最後の引数だけが割り当てられているechoからです。$_。 (!$使用する場合アルファベット入力した値(例:)に置き換えられたため、引き続き表示されます$foo。 )

$_上記に加えて、vsは!$電子なので、より実用的な価値があります。変数です。たとえば、最後のパラメータがある場合は、/some/file/path.txt長さを取得し${#_} -> 19、ファイル名のみを抽出し${_##*/} -> path.txt、ルートディレクトリを変更する${_//some/other} -> /other/file/path.txtなどの操作を実行できます。何も使用できません!$


最後に、$_他の状況では異なる意味を持つことに注意してください。

シェルが起動したら、環境リストまたは引数リストに渡されたシェルを呼び出すために使用される絶対パス名または実行中のシェルスクリプトに設定します。

...そして...

また、実行された各コマンドを呼び出し、そのコマンドにエクスポートされた環境にデプロイするために使用されるフルパス名に設定されます。

...そして...

メール確認時に現在確認中のメールファイルの名前を保存するパラメータです。

おすすめ記事