Как использовать точки с запятой в bash функции oneline декларирования - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть 2 вопроса:

1) с этой многострочной bash функцией:

somefunction() {
 do some stuff
 innerfunction() {
  do some stuff
  return 1
 }
 do more stuff
}

Проблема здесь в том, что когда сценарий входит во внутреннюю функцию и возвращается, внешний (оригинал) продолжает выполняться, что не должно (когда-то возвращаться), я не знаю почему.

2) Если я объявляю однострочную функцию, скажите:

$ func() { faill() { echo fail; return 1 } echo abc }

Я делаю не знаю, стоит ли ставить точку с запятой после последнего оператора во внутренней функции (последнее выражение - return 1), но когда я нажимаю клавишу ввода, чтобы сохранить функцию, она все еще ждет конца (поэтому я должен sigterm'd его). если я сделаю

$ func() { faill() { echo fail; return 1; } echo abc; }

То есть - добавьте точку с запятой после return 1 и echo abc - тогда bash: syntax error near unexpected token 'echo'

Так что некоторые могут дать подсказку о том, как интерпретирует bash точка с запятой (хотя я ; == \n)

1 Ответ

2 голосов
/ 30 апреля 2020

Вам также необходимо отделить определение функции от следующей команды.

func() { fail() { echo fail; return 1; }; echo abc; }
#                                       ~

Обратите внимание, что fail останется доступным вне func после запуска func.

...