2013-07-27 52 views
0

我對bash/shell函數感到非常沮喪。想要將參數傳遞給我的shell函數

我有這樣的命令:

grep -r '^struct task_struct ' include 

而且我想添加一個功能或別名到我的.bashrc,讓我這樣說

grepdefined "struct task_struct" 

,並從上面運行的命令。然後再次用「struct task_info」或其他東西運行它。太令人沮喪了。

我現在有這個權利,我測試的一切,在這個問題拋出猜測:在「結構task_struct中」說我傳遞

function grepdefined() { 
    test="[email protected]"; 
    echo $test; 
    grep -rni '^'$test' ' include; 
    #echo "grep -rni'^'$test' ' include;" 
} 

這只是第一個單詞搜索,「結構」用grepdefined「struct task_struct」。

回答

4

修改您的grep一行:

grep -rni "^$test" include 

更新

grep -rni "^$test" include 

實際上變成:

grep -rni "^struct task_struct" include 

然而,

grep -rni '^'$test' ' include 

被解釋爲:

grep -rni ^struct task_struct include 

如果你在上面看到,對於grep的搜索模式僅僅是^struct,而task_struct被認爲是其中的一個文件與include,因此問題一起搜索模式你面對的只是struct而不是整個事情。無論何時使用多字節字符串,它都必須加倍報價。

+0

非常感謝。你能告訴我爲什麼這有效嗎?我知道它必須是逃避字符串的東西,不是什麼,但我很難理解它。 – cdietschrun

+0

@cdietschrun:用更多評論更新瞭解決方案 – Guru