Bash 为什么函数定义中花括号前需要空格?

Bash 为什么函数定义中花括号前需要空格?,bash,function,shell,syntax,Bash,Function,Shell,Syntax,我试图创建一个bash脚本,将一堆PDF转换为文本,以便提取一些信息,但shell给了我以下错误: ./AutoBib.sh: line 8: syntax error near unexpected token `pdftotext' ./AutoBib.sh: line 8: ` pdftotext $1 temp.txt' 下面是我的函数的一个示例: function doi{ pdftotext $1 temp.txt cat temp.txt | grep d

我试图创建一个bash脚本,将一堆PDF转换为文本,以便提取一些信息,但shell给了我以下错误:

./AutoBib.sh: line 8: syntax error near unexpected token `pdftotext'
./AutoBib.sh: line 8: `    pdftotext $1 temp.txt'
下面是我的函数的一个示例:

function doi{

    pdftotext $1 temp.txt
    cat temp.txt | grep doi: | cut -d: -f 2 | head -n 1 >> dois.txt
    rm -rf temp.txt
}
doi $PDF
其中变量
PDF
被输入。在添加功能之前,我通常在脚本中编写:

pdftotext $PDF tempo.txt

在函数名后面和
{
前面需要一个空格:

function doi {
            ^
来自Bash:

大括号是保留字,因此必须将它们与列表分开 通过空格或其他shell元字符

function…
是定义Bash函数的语法。请改用此语法:

doi() {
   ...
}
由于
()
是元字符,因此在本例中不需要空格(尽管空格使代码更漂亮):

稍微扩展一下,请记住,在命令中,
{
之后和`}之前需要一个空格(空格、制表符或换行符),如下所示:

{ command1; command2; ... }
是的。(严格地说,您不需要。
doi{
——Bash允许您定义一个名为
doi{
——但是在函数名后面需要一个
{
标记。)问题是
doi{
是一个单独的标记,而不是一个标识符
doi
,后跟一个
{/code>标记。
{ command1; command2; ... }