A script interface starts with the values callers can pass. Defaults keep the command predictable when an argument is omitted.

Program

Play the script to choose a modeled first argument and see the effective project name.

arg_project
argument_default.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash

arg_project=""
project="${arg_project:-demo}"
echo "project=$project"
#!/usr/bin/env bash

arg_project="api"
project="${arg_project:-demo}"
echo "project=$project"
  1. arg_project ← (empty)

    3arg_project=""4project="${arg_project:-demo}"
    values this step(empty)arg_project
  2. project ← demo

    3arg_project=""4project="${arg_project:-demo}"5echo "project=$project"
    values this stepdemoproject(empty)arg_project
  3. echo "project=$project"

    4project="${arg_project:-demo}"5echo "project=$project"
    outputproject=demo
    values this stepdemoproject
  1. arg_project ← api

    3arg_project="api"4project="${arg_project:-demo}"
    values this stepapiarg_project
  2. project ← api

    3arg_project="api"4project="${arg_project:-demo}"5echo "project=$project"
    values this stepapiprojectapiarg_project
  3. echo "project=$project"

    4project="${arg_project:-demo}"5echo "project=$project"
    outputproject=api
    values this stepapiproject
argument A script argument is caller-provided input.
default `${name:-fallback}` supplies a fallback when the input is empty.
interface value Copying the effective value into a named variable makes later code easier to read.