Почему, когда я пытаюсь написать функцию только в одной строке в файл .bashrc,
list(){ ls -a }
Я получаю ошибку?
bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file
, но когда я ее пишу в многострочной линии это нормально?
list(){
ls -a
}
В конце функции есть ;:
list(){ ls -a ; }
.
Синтаксис определения функции для bash указан как
name () { list ; }
Обратите внимание, что он включает в себя ;, который не является частью list.
Что требуется ; в этом месте, является разновидностью аномалии синтаксиса. Это не bash конкретный, это то же самое для ksh, но в zsh не требуется ;.
Конец одной команды (";") подразумевается новой строкой. В версии oneline } анализируется как аргумент для команды unterminated ls -a. Что вы можете увидеть, если вы это сделаете:
$ foo(){ echo "a" }
}
$ foo
a }
Посмотрите, как команда внутри декларации функции проглатывает конечную фигурную скобку?