Почему пробелы требуются перед фигурной скобкой в ​​определении функции? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать bash-скрипт, который преобразует кучу pdf-файлов в текст, чтобы извлечь некоторую информацию, но оболочка выдает мне эту ошибку:

./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 голосов
/ 15 ноября 2018

Из Баш руководство :

Скобки - это зарезервированные слова, поэтому они должны быть отделены от списка. пробелами или другими метасимволами оболочки.

function ... - это устаревший синтаксис для определения функций Bash. Используйте это вместо:

doi() {
   ...
}

Поскольку () являются метасимволами, в этом случае вам не нужен пробел (хотя пробелы делают ваш код красивее):

doi(){
  ...
}

Немного расширив это, помните, что нам нужен пробел (пробел, табуляция или символ новой строки) после { и перед `} 'в команде группировка , например:

{ command1; command2; ... }
0 голосов
/ 15 ноября 2018

Вам нужен пробел после названия вашей функции и перед {:

function doi {
            ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...