是否有办法检查是否正在使用bash脚本中声明的所有变量?类似于C ++中的-Wall?
干杯
答案 0 :(得分:6)
没有内置的方法可以做到这一点,不,由于以下情况,它永远无法完美地完成:
CLASSPATH
作为环境变量。然后,Bash脚本可能包含CLASSPATH=...之类的语句,但从不引用
CLASSPATH
,如果它分配给CLASSPATH
的唯一目的是修改某些使用环境变量的程序的行为(例如java
)。a
和b
,以及变量c
,其值来自用户,可以是a
或b
。然后我可以使用${!c}
来获取用户指定变量的值;脚本的给定运行可能永远不会引用b
(因为c
设置为'a'
),但脚本的不同运行可能会有所不同。也就是说,您可能对-u
内置的set
选项感兴趣。如果您的脚本包含以下命令:
set -u
然后从那时起,引用尚未设置的变量或参数将是错误的。这有助于检测变量名称中的拼写错误等等。这显然远远小于gcc -Wall
所做的事情(因为gcc
总是在您引用未声明的变量时给出错误消息),但您可能会发现它在同样的方式。