conchas compatíveis com Posix e Bash tem ${parameter:+word}
:
If parameter is unset or null, null shall be substituted; otherwise, the expansion of word (or an empty string if word is omitted) shall be substituted.
Então você pode fazer:
${var1:+"$var1"}
e ter var1
verificado, e "$var1"
ser usado se estiver definido e não vazio (com as regras comuns de aspas duplas). Caso contrário, ele se expande para nada. Note que somente a parte inner é citada aqui, não a coisa toda.
O mesmo também funciona em zsh. Você tem que repetir a variável, então não é o ideal, mas funciona exatamente como você queria.
Se você quiser que uma variável definida-mas-vazia se expanda para um argumento vazio, use ${var1+"$var1"}
.