The problem

I am working on a new Octopus step template for Firebase deployments. I want to make the template shareable, so it should support all of the deploy command parameters.

I do not write Bash scripts very often. When I do, I do not usually plan to share them, so I write them to suit only my use case. I quickly ran into a problem I did not have a solution to.

Take the message parameter of the Firebase deploy command.

firebase deploy -m "A helpful comment about this deployment"

Message is optional. I only want to pass it to the command if a user of the template has provided it.

The solution

The solution is shell parameter expansion.

${parameter:+word}
    If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted.

Perfect! What does that look like in practice?

message=$(get_octopusvariable "FirebaseDeploy.Message")

firebase deploy ${message:+ -m "$message"}

I will be writing more Bash scripts, so it is good to have learned this feature early on.

What is your favorite Bash tip or trick?