Você receberia essa mensagem de erro se tivesse transformado a opção -u
invocando ksh
como ksh -u
ou ksh -o nounset
ou executando set -u
ou set -o nounset
.
touch $var1 $var2 $var3
está errado de qualquer forma, a menos que essas variáveis sejam destinadas a conter listas de padrões de arquivos.
Deveria ter sido:
touch -- "$var1" "$var2" "$var3"
Agora, se você quiser permitir que um deles fique vazio e não o transmita como um argumento vazio para touch
nesse caso (e trabalhe em torno de set -u
), você escreverá:
touch -- ${var1:+"$var1"} ${var2:+"$var2"} ${var3:+"$var3"}
Outra opção é fazer:
(IFS=; set -f +u; touch -- $var1 $var2 $var3)
Com IFS=
, desabilitamos divisão de palavras , com set -f
globbing, mas contamos com o terceiro efeito colateral de deixar as variáveis sem aspas: remoção vazia . (e também desabilitamos nounset
com set +u
, tudo isso apenas em um subshell).