I need to work and understand a ksh script. The variable declaration is done in a different way I am used to:


I don't really understand what does the "1:-" stands for? Is it possible to make a loop with this variable declaration such as:

STA=${1:-blabla blabla2 blabla3}

2 Answers 2


${var:-x} means "if var is unset or empty, replace it with x". As such it depends on what you mean by "mak[ing] a loop".

If you make a loop by splitting on $IFS, then yes, you can use this to create a variable for a loop. However, if that's what you want to do, I'd recommend using a ksh array instead:

if [ "$#" -eq 0 ]; then
  set -A sta blabla blabla2 blabla3 # ksh88/pdksh/mksh/ksh93
  sta=(blabla blabla2 blabla3)      # ksh93/mksh
  sta=("$@") # use the positional parameters if provided

for x in "${sta[@]}"; do [...]

${1} is the first argument to the script. The substitution modifier :- is explained in the manual page for ksh:


If name is set and not NULL, it is substituted; otherwise, word is substituted.

Thus, if an argument is provided to your script or function, $STA will be assigned the value of that argument. If there is no ${1}, then $STA will be assigned the default value "blabla" instead.

This is not a loop operator; if you want to loop over several values you'd need syntax other than ${1:-blabla blabla2 blabla3}.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .