2012-05-10 57 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