2009-07-03 26 views
0

這個問題是根據this thread通過記下no來修復Less中的錯誤。的參數

代碼

function man() 
{  
    man "$1" > /tmp/manual; less /tmp/manual 
} 

問題:如果我使用甚至一個選項,則該命令不知道哪裏是想手動

例如,

man -k find 

給了我一個錯誤,因爲參考是錯誤的。該命令的手冊爲-k

我試圖解決在僞代碼

if no parameters 
    run the initial code 
if one parameter 
    run: man "$2" 
... 

換句話說,我們需要添加一個問題的選項,檢查開始,從而

僞代碼

man $optional-option(s) "$n" > /tmp/manual; less /tmp/manual 

其中$ n

  • N = 1,如果零選項
  • N = 2,如果1選項
  • N = 3,如果2個選項
  • ....

你怎麼能做出這樣的「選項 - 檢查「,你可以改變$ n的值?

開發問題:進行兩次,如果從n個的情況下循環= 1到n = 2

+0

@謝謝你的回答!應該引用 – 2009-07-03 16:11:09

回答

2

如何傳遞的所有參數

function man() 
{  
    man [email protected] > /tmp/manual; less /tmp/manual 
} 

什麼是錯誤更少其中你在標題中提到?

+0

$ @。否則,「人」一個人可能被解釋爲「一個人」。 – 2009-07-03 16:01:41

1

首先,您可以使用$*[email protected]將所有函數的參數傳遞給man。你可以閱讀man sh瞭解兩者之間差異的確切細節;短篇故事幾乎總是用雙引號"[email protected]"

其次,臨時文件是不必要的。您可以通過管道man輸出使這一點清潔劑直接到less

function man() { 
    man "[email protected]" | less 
} 

順便說一句,如果你只是想使用不同的尋呼機(man使用more和你想要的票友less)有一個公認的PAGER環境變量可以設置爲覆蓋默認尋呼機。你可以爲實例添加到您的~/.bashrc告訴所有程序使用less顯示輸出的多屏時:

export PAGER=less 

要回答你確切的問題,你可以檢查參數的數量與$#

if [ $# -eq 0 ]; then 
    : # No arguments 
elif [ $# -eq 1 ]; then 
    : # One argument 
# etc. 

您可能還會發現shift命令有幫助。它將$2重命名爲$1$3$2,依此類推。它經常用於一個循環來逐個處理命令行參數:

while [ $# -gt 1 ]; do 
    echo "Next argument is: $1" 
    shift 
done 

echo "Last argument is: $1" 
+0

$ *在OS/X中不起作用。 – 2009-07-03 16:16:12

相關問題