if [ "${var+SET}" = "SET" ] ; then
echo "\$var = ${var}"
fi
Je ne sais pas à quand remonte le support de ${var+value}, mais il fonctionne au moins depuis la version 4.1.2. Les versions plus anciennes n'avaient pas de ${var+value}, mais seulement ${var:+value}. La différence est que ${var:+value} n'est évalué à "valeur" que si $var est défini comme une valeur non vide tandis que ${var+valeur} sera également évalué comme "valeur" si $var est défini comme une chaîne vide.
Sans [[ -v var ]] ou ${var+valeur}, je pense que vous devrez utiliser une autre méthode. Probablement un test sous-shell tel que décrit dans une réponse précédente :
if ( set -u; echo "$var" ) &> /dev/null; then
echo "\$var = ${var}
fi
Si la commande "set -u" est déjà active dans votre processus shell, elle le sera également dans le sous-shell sans qu'il soit nécessaire d'utiliser à nouveau "set -u", mais le fait de l'inclure dans la commande du sous-shell permet à la solution de fonctionner également si le processus parent n'a pas activé "set -u".
(Vous pourriez également utiliser un autre processus comme "printenv" ou "env" pour tester la présence de la variable, mais alors cela ne fonctionnerait que si la variable est exportée).