Существует различие, да. Но это очень тонко начиная с оценки пустой строки, и переменная сброса то же.
$ env - FOO= sh -c 'echo "X${FOO}X X${FOO:+x}X X${FOO+x}X"; env'
XX XX XxX
FOO=
PWD=/tmp
$ env - FOO= sh -c 'unset FOO; echo "X${FOO}X X${FOO:+x}X X${FOO+x}X"; env'
XX XX XX
PWD=/tmp
Оба будут иметь ${FOO:+x}
оцените к пустой строке. Но ${FOO+x}
оценит к "x", когда НЕЧТО будет пустой строкой.
Одна вещь, для которой я обычно использую это, состоит в том, чтобы настроить a $DEBUG
переменная среды, и затем использует ${DEBUG+true}
в программе. Затем я могу установить ОТЛАДКУ на что-либо, включая пустую строку.
На высокоуровневых языках, как Perl и Python, вот в чем разница между "" и undef (Perl) или Ни один (Python).
Смотрите на изображения LiveCD для своего любимого распределения. Рассечение этого должно вести Вас.
Или сохраните себя стычка, узнайте, как они создают LiveCDs и работают оттуда. Fedora LiveCD дает некоторые подсказки (для Fedora, другие дистрибутивы должны иметь что-то подобное).