2012-03-27 59 views

回答

6

没有内置的方式做到这一点,没有了,是永远无法做到完美,因为像这样的情况下,:

  • 假设用户的Bash的轮廓出口CLASSPATH作为环境变量。然后,一个Bash脚本可能包含一个像
    CLASSPATH=...
    这样的语句,但从未参考CLASSPATH,如果它在分配CLASSPATH的唯一目的是修改某些使用该环境变量的程序(如java)的行为。
  • 假设我创建了变量ab以及变量c,它们的值是从用户获得的,可以是ab。然后我可以使用${!c}来获取用户指定变量的值;给定的脚本运行可能永远不会引用b(因为c设置为'a'),但脚本的其他运行可能会有所不同。

也就是说,你可能会对选项感兴趣set builtin。如果您的脚本包含以下命令:

set -u 

然后从这一点上来说,这将是指尚未设定的变量或参数错误。这可以帮助检测变量名称和错误中的拼写错误。这显然比gcc -Wall的要少得多(因为gcc总是在引用未声明的变量时会给出错误消息),但是您可能会发现以相同的方式有用。

+0

谢谢,'set -u'会很有用。但是,我正在寻找能够检查所有正在使用的变量的东西,而不是所有正在使用的变量都被声明。也许一个bash脚本可以做到这一点? – Eddy 2012-04-02 11:13:31

+0

@Eddy:是的,我明白你在找什么。正如我所解释的那样,没有固定的方法来做到这一点,它永远不可能完美地完成。您是否在寻找一种容易出错的方式来近似? – ruakh 2012-04-02 11:38:19