2011-07-06 47 views
4

在bash中,我知道3個「以前命令的參數」快捷鍵。它們是:以前的參數快捷鍵?

  1. ^→第一個參數,空間保存;!
  2. $ _→last arg,spaces 不是保存;
  3. !*→所有參數,空間保留;

那麼還有更多的arg vars /快捷方式嗎? :)


$ _當我打電話用一個命令文件,這是在不同的[長命名]目錄執行的話是有用的,然後想在我的下一個命令再次調用它[即$ 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";比較,然後按回車鍵,則:$ for i in !*; do echo \"$i\" done;

你能不能也解釋了爲什麼你必須按輸入^然後做了」 「循環爲了!*工作? [爲什麼$ _不需要按輸入(AKA,你可以使用「;」來組合命令)]

回答

2

$做可變擴展,而!是歷史擴展。對於!來訪問參數,您必須已經將命令添加到bash歷史記錄中,這會在執行/按Enter時發生。

2

$ _保留空格就好了。否則,它會給你一個混亂的混亂或只是命令的後半部分。你想要的是在$ _周圍添加引號,以便接收它的命令也保留空格。

所以,在你的榜樣:

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

$_將保留空間的罰款,如果你引用得當"$_"。它的行爲與其他行爲不同,因爲它是與history substitution不同的機制。

您可能要查看的另一個機制是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< 

history expansion在bash的手冊。