if [ "${var+SET}" = "SET" ] ; then
echo "\$var = ${var}"
fi
$ {var + value}がどれだけ前にサポートされているかはわかりませんが、少なくとも4.1.2までは機能します。古いバージョンには${var+ value}がなく、$ {var:+value}しかありませんでした。違いは、$ {var:+ value}は、$ varが空でない文字列に設定されている場合にのみ「value」と評価され、$ {var+value}も$varが空に設定されている場合は「value」と評価されることです。ストリング。
[[-vvar]]または${var+ value}がないと、別の方法を使用する必要があると思います。おそらく、前の回答で説明したサブシェルテスト:
if ( set -u; echo "$var" ) &> /dev/null; then
echo "\$var = ${var}
fi
シェルプロセスで「set-u」がすでにアクティブになっている場合は、「set -u」を再度必要とせずにサブシェルでもアクティブになりますが、サブシェルコマンドに含めると、親プロセスでもソリューションが機能します。 「set-u」が有効になっていません。
(「printenv」や「env」などの別のプロセスを使用して変数の存在をテストすることもできますが、その場合は、変数がエクスポートされた場合にのみ機能します。)