2012-09-18 23 views
0

比方說,我有一個函數在擊:Bash的函數將引用引用參數分解的命令嗎?

function ll { 
    command ls -l $* 
} 

因此它是讓ll作品像ls -l。大多數情況下,它會工作,但

ls -l "ha ha" 

可以與名ha ha文件的工作,但

ll "ha ha" 

會失敗,因爲它被認爲是

ls -l ha ha 

有沒有辦法做到這一點?我認爲,我們可以使它

function ll { 
    command ls -l "[email protected]" 
} 

(注意"[email protected]""$*"不同,與"[email protected]"意思單獨報價,而"$*"是指在同一個字符串的引用)

但隨後,ll -t "ha ha"將成爲ls -l "-t" "ha ha",這實際上有效,但有點奇怪,我不確定它在某些情況下是否會崩潰。

是否有另一種方式使其工作,另一件事是,我認爲在功能上,command ls -l "[email protected]"ls -l "[email protected]"是一樣的嗎? (command僅僅是直接運行程序,而不是調用任何可能的bash功能,以防止遞歸的發生?)

+0

'll -t「ha ha」'等於'ls -l「-t」「ha ha」'的意思,'ll「-t」「-F」「ha ha」'等於'ls -t -F「haha」' – sapht

回答

4

因爲殼進行引用刪除它執行ls之前是沒有問題的。您可以安全地使用

function ll { 
    command ls -l "[email protected]" 
} 

並稱之爲ll -t "ha ha"。查看您的shell的手冊頁面並搜索「報價清除」。

+0

那麼這個''$ @「'是一種人們如何使用函數定義別名的標準方式? –

+0

您可以使用'「$ @」'作爲這個以及任何其他重要的空格作爲單詞(參數)的一部分。 ''$ @'''的處理,即雙引號出現的'$ @'在這方面與'$ *''完全不同。 – Jens