Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Forward function declarations in a Bash or a Shell script?

Is there such a thing in bash or at least something similar (work-around) like forward declarations, well known in C / C++, for instance?

Or there is so such thing because for example it is always executed in one pass (line after line)?

If there are no forward declarations, what should I do to make my script easier to read. It is rather long and these function definitions at the beginning, mixed with global variables, make my script look ugly and hard to read / understand)? I am asking to learn some well-known / best practices for such cases.


For example:

# something like forward declaration function func  # execution of the function func  # definition of func function func {     echo 123 } 
like image 214
Kiril Kirov Avatar asked Nov 27 '12 16:11

Kiril Kirov


2 Answers

Great question. I use a pattern like this for most of my scripts:

#!/bin/bash  main() {     foo     bar     baz }  foo() { }  bar() { }  baz() { }  main "$@" 

You can read the code from top to bottom, but it doesn't actually start executing until the last line. By passing "$@" to main() you can access the command-line arguments $1, $2, et al just as you normally would.

like image 83
John Kugelman Avatar answered Sep 22 '22 22:09

John Kugelman


When my bash scripts grow too much, I use an include mechanism:

File allMyFunctions:

foo() { }  bar() { }  baz() { } 

File main:

#!/bin/bash  . allMyfunctions  foo bar baz 
like image 22
mouviciel Avatar answered Sep 23 '22 22:09

mouviciel