2011-07-06 11 views
4

bashでは、私は3つの "前のコマンドからの引数"ショートカットを知っています。彼らは以下のとおりです。前のargsショートカット?

  1. ^最初のarg→、保存スペース;!
  2. $ _→最後のarg、スペースは保存されません。
  3. !*→すべてのargs、スペースが保存されます。

これ以上のarg vars/shortcutsはありますか? :)


$ _私はのは、異なる[長い名前の]ディレクトリに言うことを、1つのコマンドでファイルを呼び出すときは便利ですし、私の次のコマンドで再びそれを呼び出したい[すなわち、 $ stat a\ b\ c/sub/folder/example.txt; mv $_ .]は、スペースがある場合を除いて動作しません。

なぜ$ _はスペースを保持しませんか?私はこのタイプ何を意味するかを確認するには:

$ echo "1" "One String Quoted"; for i in $_; do echo \"$i\"; done をして

$ echo 1 2 "3 4 5";と比較して、その後、その後をEnterキーを押します。$ for i in !*; do echo \"$i\" done;

あなたは^が、その後「のための操作を行う入力押す必要がある理由をも説明することができます"!*のためにループしていますか? [$ _がなぜ入力を押すことなく動作するのか(なぜなら、 ";"を使用してコマンドを結合することができます)]

答えて

2

$は可変拡大を行いますが、!は履歴拡張です。 !が引数にアクセスするには、コマンドを実行時に/ enterを押したときに起こるbashヒストリに追加しておく必要があります。現在の行にアクセスパラメータに

2

$ _はスペースをきちんと保存します。それ以外の場合は、混乱した混乱やコマンドの最後の半分を与えることになります。あなたが望むのは、それを受け取っているコマンドがスペースを保存するように、$ _の周りに引用符を追加することです。

だから、あなたの例では:あなたが適切"$_"を、それを引用する場合

$ stat a\ b\ c/sub/folder/example.txt; mv "$_" . 
1

$_はスペースが罰金保存します。 history substitutionとは別のメカニズムであるため、他とは動作が異なります。

もう1つのメカニズムは、fcコマンドです。

1

使用!#

$ echo 1 2 "3 4 5"; for i in !#:1-3; do echo ">$i<"; done 
1 2 3 4 5 
>1< 
>2< 
>3 4 5< 

は、bashのマニュアルにhistory expansionを参照してください。

関連する問題