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

时间:2018-11-14 22:55:10

标签: bash function 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 doi: | cut -d: -f 2 | head -n 1 >> dois.txt
    rm -rf temp.txt
}
doi $PDF

在输入中使用变量PDF的位置。在添加它起作用的功能之前,我曾经写过脚本:

pdftotext $PDF tempo.txt

2 个答案:

答案 0 :(得分:5)

来自Bash manual

  

花括号是保留字,因此必须与列表分开   按空格或其他外壳元字符。

function ...是用于定义Bash函数的outdated语法。改用它:

doi() {
   ...
}

由于()是元字符,因此在这种情况下您不需要空格(尽管空格会使代码更漂亮):

doi(){
  ...
}

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

{ command1; command2; ... }

答案 1 :(得分:2)

函数名称后{前需要一个空格:

function doi {
            ^