shell - How to check if a variable is set in Bash? -


how know if variable set in bash?

for example, how check if user gave first parameter function?

function {     # if $1 set ? } 

the right way

if [ -z ${var+x} ]; echo "var unset"; else echo "var set '$var'"; fi 

where ${var+x} parameter expansion evaluates nothing if var unset, , substitutes string x otherwise.

quotes digression

quotes can omitted (so can ${var+x} instead of "${var+x}") because syntax & usage guarantees expand not require quotes (since either expands x (which contains no word breaks needs no quotes), or nothing (which results in [ -z ], conveniently evaluates same value (true) [ -z "" ] well)).

however, while quotes can safely omitted, , not obvious (it wasn't apparent the first author of quotes explanation major bash coder), better write solution quotes [ -z "${var+x}" ], @ small possible cost of o(1) speed penalty. first author added comment next code using solution giving url answer, includes explanation why quotes can safely omitted.

the wrong way

if [ -z "$var" ]; echo "var unset"; else echo "var set '$var'"; fi 

this because doesn't distinguish between variable unset , variable set empty string. say, if var='', above solution incorrectly output var unset.

but distinction essential in situations user has specify extension, or additional list of properties, , not specifying them defaults non-empty value, whereas specifying empty string should make script use empty extension or list of additional properties.


Comments

Popular posts from this blog

python Tkinter Capturing keyboard events save as one single string -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

javascript - Z-index in d3.js -