GGistDev

Variables in Bash

Set variables, export to child processes, and use positional parameters.

Setting and reading

name="Ada"
echo "$name"

No spaces around = when assigning.

Exporting and environment

export API_URL="https://api.example.com"
# child processes see exported vars
node app.js

Local variables (functions)

myfn() {
  local count=0
  echo "$count"
}

Positional parameters and $#/$@/$*

# script.sh a b c
echo "$#"   # number of args
for x in "$@"; do echo "$x"; done

Use "$@" to preserve argument boundaries; avoid $*.

Special parameters

  • $?: exit status of last command
  • $$: current PID
  • $!: last background PID
  • $0: script name

Parameter expansion basics

user=${USER:-guest}    # default
msg=${msg:=hello}      # assign default
trim=${s%/}            # remove suffix pattern
upper=${name^^}        # uppercase (bash)

Summary

  • Assign with name=value, quote expansions, export when needed, and prefer "$@" for args