2012-05-10 59 views
1

我有一個bash的功能如下:這是一個語法錯誤?

function folderSize{ 
    du -hs | awk '{print $1}' 
} 
folderSize 

當我運行它,我得到以下錯誤:

./size.sh: line 2: syntax error near unexpected token `du' ./size.sh: 

line 2: ` du -hs | awk "{print $1}"' 

任何一個能幫助我嗎?

+0

一些問題。 1.您在調用函數時不需要$。 2.你需要一個du命令的參數3.當你調用一個bash函數時,你不會使用parens,只需要你爲arg所需的任何字符串。我的版本可以工作,您可以更仔細地檢查它。 – johnshen64

+0

不應該du -hs在cwd上運行? – GeneralZero

回答

5

在{之前需要空格。

function folderSize { 
    du -hs | awk '{print $1}' 
} 

此外,調用該函數的方法就是folderSize,沒有貨幣符號,沒有括號。

+0

我已將其更改爲'function folderSize {du -hs | awk'{print $ 1}'}'仍然有相同的錯誤 – GeneralZero

+1

貌似你還沒有空間。 'folderSize'之後和'{'之前需要一個空格。如果您要嘗試將其全部聲明爲一行,則在'}'之前還需要分號。 –

+0

謝謝我不知道 – GeneralZero

0

我不確定您的變體的語法是否正確。我通常做的有點像這樣:

folderSize() { 
    du -hs | awk '{print $1}' 
} 
folderSize 
+0

fnName()是舊的Bourne shell語法,它工作正常。由於圓括號解析了分析,所以你也可以不用空格:'folderSize(){du -hs | awk'{print $ 1}'; }' –

+0

@MarkReed不知道,謝謝你的信息。 –

0
function folderSize { 
    du -hs $1 | awk '{print $1}' 
} 

folderSize '.' 
+0

不知道爲什麼你引入了一個參數,或者你爲什麼要在調用中引用參數,但最好是以'du -hs「$ @」'來表示最好的一般性。 –

+0

謝謝,是的。你對於論證的一般化是正確的。我只是想讓它工作:-)我添加了一個參數來測試當前目錄。 – johnshen64