diff --git a/README.md b/README.md index 282dc84..94f6c96 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,13 @@ $ my_script some more args --blah - This project settles on two spaces for tabs - Use `UPPERCASE_VARS` to indicate environment variables that can be controlled outside your script - Use `__double_underscore_prefixed_vars` to indicate global variables that are solely controlled inside your script, with the exception of arguments wich are already prefixed with `arg_`, and functions, over which b3bp poses no restrictions. +- Use `set` rather than relying on a shebang like `#!/usr/bin/env bash -e` as that is neutralized when someone runs your script as `bash yourscript.sh` +- Use `BASH_SOURCE[0]` if you refer to current file even if it is sourced by a parent script. Otherwise use `${0}` +- Use `:-` if you want to test variables that could be undeclared. For instance: `if [ "${NAME:-}" = "Kevin" ]` will set `$NAME` to be empty if it's not declared instead of throwing an error. You can also set it to `noname` like so `if [ "${NAME:-noname}" = "Kevin" ]` +- Use long options (`logger --priority` vs `logger -p`). If you're on cli, abbreviations make sense for efficiency. but when you're writing reusable scripts a few extra keystrokes will pay off in readability and avoid ventures into man pages in the future by you or your collaborators. +- `#!/usr/bin/env bash` is more portable than `#!/bin/bash`. +- Surround your variables with `{}`. Otherwise bash will try to access the `$ENVIRONMENT_app` variable in `/srv/$ENVIRONMENT_app`, whereas you probably intended `/srv/${ENVIRONMENT}_app`. +- You don't need two equal signs when checking `if [ "${NAME}" = "Kevin" ]`. ## Frequently Asked Questions