:B~ Coding Style 1~coding-style Coding Style This chapter documents the coding style used in live systems. 2~ Compatibility _* Don't use syntax or semantics that are unique to the Bash shell. For example, the use of array constructs. _* Only use the POSIX subset - for example, use $(foo) over `foo`. _* You can check your scripts with 'sh -n' and 'checkbashisms'. _* Make sure all shell code runs with 'set -e'. 2~ Indenting _* Always use tabs over spaces. 2~ Wrapping _* Generally, lines are 80 chars at maximum. _* Use the "Linux style" of line breaks: Bad: code{ if foo; then bar fi }code Good: code{ if foo then bar fi }code _* The same holds for functions: Bad: code{ Foo () { bar } }code Good: code{ Foo () { bar } }code 2~ Variables _* Variables are always in capital letters. _* Variables used in live-build always start with #{LB_}# prefix. _* Internal temporary variables in live-build should start with the #{\_LB_}# prefix. _* Local variables start with live-build #{\_\_LB_}# prefix. _* Variables in connection to a boot parameter in live-config start with #{LIVE_}#. _* All other variables in live-config start with #{_}# prefix. _* Use braces around variables; e.g. write #{${FOO}}# instead of #{$FOO}#. _* Always protect variables with quotes to respect potential whitespaces: write #{"${FOO}"}# not #{${FOO}}#. _* For consistency reasons, always use quotes when assigning values to variables: Bad: code{ FOO=bar }code Good: code{ FOO="bar" }code _* If multiple variables are used, quote the full expression: Bad: code{ if [ -f "${FOO}"/foo/"${BAR}"/bar ] then foobar fi }code Good: code{ if [ -f "${FOO}/foo/${BAR}/bar" ] then foobar fi }code 2~ Miscellaneous _* Use "#{|}#" (without the surround quotes) as a separator in calls to sed, e.g. "#{sed -e 's|foo|bar|'}#" (without ""). _* Don't use the #{test}# command for comparisons or tests, use "#{[}#" "#{]}#" (without ""); e.g. "#{if [ -x /bin/foo ]; ...}#" and not "#{if test -x /bin/foo; ...}#". _* Use #{case}# wherever possible over #{test}#, as it's easier to read and faster in execution. _* Use capitalized names for functions to limit messing with the users environment.