записать в одну строку в ~ / .bashrc

Почему, когда я пытаюсь написать функцию только в одной строке в файл .bashrc,

list(){ ls -a }

Я получаю ошибку?

bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file

, но когда я ее пишу в многострочной линии это нормально?

list(){
    ls -a
}
1
задан 9 September 2014 в 17:47

2 ответа

В конце функции есть ;:

list(){ ls -a ; }

.

Синтаксис определения функции для bash указан как

name () { list ; }

Обратите внимание, что он включает в себя ;, который не является частью list.

Что требуется ; в этом месте, является разновидностью аномалии синтаксиса. Это не bash конкретный, это то же самое для ksh, но в zsh не требуется ;.

22
ответ дан 24 May 2018 в 03:50

Конец одной команды (";") подразумевается новой строкой. В версии oneline } анализируется как аргумент для команды unterminated ls -a. Что вы можете увидеть, если вы это сделаете:

$ foo(){ echo "a" }
}
$ foo
a }

Посмотрите, как команда внутри декларации функции проглатывает конечную фигурную скобку?

14
ответ дан 24 May 2018 в 03:50
  • 1
    Отличное объяснение! Так что не просто аномалия синтаксиса; на самом деле есть какая-то логика. – Don Hatch 13 January 2016 в 16:42

Другие вопросы по тегам:

Похожие вопросы: