Нет встроенного способа сделать это, нет, и это никогда не может быть сделано идеально, из-за ситуаций, подобных этим:
- Предположим, пользовательский профиль Bash экспортирует
CLASSPATH
в качестве переменной среды. Тогда сценарий Bash может включать в себя оператор типа CLASSPATH=...
, но никогда не ссылаться на CLASSPATH
, если его единственная цель при назначении CLASSPATH
состоит в изменении поведения некоторой программы, которая использует переменную среды (например, java
) .
- Предположим, что я создаю переменные
a
и b
и переменную c
, значение которой получено от пользователя и может иметь значение a
или b
. Затем я могу использовать ${!c}
, чтобы получить значение указанной пользователем переменной; данный прогон скрипта может никогда не ссылаться на b
(поскольку c
установлен на 'a'
), но другой прогон скрипта может работать по-другому.
Тем не менее, вас может заинтересовать опция -u
для встроенного set
. Если ваш скрипт содержит эту команду:
set -u
с этого момента будет ошибкой ссылаться на переменную или параметр, которые не были установлены. Это может помочь обнаружить опечатки в именах переменных и еще много чего. Это, очевидно, намного меньше, чем то, что делает gcc -Wall
(поскольку gcc
всегда выдает сообщение об ошибке, когда вы ссылаетесь на необъявленную переменную), но вы можете найти его таким же полезным.