(引用符なしで)来ました!$
。私は以前これを見たことがなく、いくつかのテストを行いました。
$ ls -l
(...some output...)
$ echo !$
-l
$ echo "!$"
-l
man bash
履歴拡張セクションには次のように記載されています。
$最後の言葉。これは通常最後の引数ですが、行に単語が1つしかない場合は0番目の単語に展開されます。
それはできません。ところで、引用すべきでしょうか、引用しないでください。履歴拡張の別のテストの結果、次のような疑問が生じました。
$ man bash
$ "!!"
"man bash"
bash: man bash: command not found
これは予想されます。しかし、それではどうですか!$
?言葉だから引用しなければならないようですが…
(ここでこの新しいタブを見てみましょう。良い練習.)
ベストアンサー1
履歴拡張では、単語の周りに引用符のセットを追加するかどうかによって異なります。
仮説foo="abc def"
、比較
$ echo $foo
$ printf "<%s>\n" !$
そして
$ echo $foo
$ printf "<%s>\n" "!$"
前者は、を生成しprintf "<%s>\n" $foo
、単語分割を呼び出し、printf
フォーマット文字列の後に2つのパラメータを取得します。 2番目のものが生成されます。printf "<%s>\n" "$foo"
ここで、引用符は通常どおり単語の分離を防ぎます。
もちろん、これを行うには:
$ echo "$foo"
次に、次のコマンドのaが!$
展開され、"$foo"
引用符が付きます。これで、引用符が効果的に互いに相殺される位置が"!$"
作成されます。""!$""