确定全局使用哪些变量

时间:2012-06-07 13:07:10

标签: bash shell ksh

我正在尝试重构一些冗长的shell脚本,并且我想消除在函数内声明但在全局使用的任何变量。有没有办法快速找到这些变量?

或者,有没有办法快速找出哪些变量在使用时是空的?这样我就可以在函数中排版所有变量,并快速查看所有这些全局使用变量的列表(有一些误报,但我可以通过这些变量除外)。

感谢。

2 个答案:

答案 0 :(得分:2)

您可能会发现set -u有帮助。如果在使用时未设置变量,则shell将出错。这不会帮助您找到使用时为空字符串的变量,但会找到未设置的变量。

答案 1 :(得分:1)

我不知道这里有任何真正的快捷方式,但您可以采取一些步骤来更系统地探索您的脚本。

  1. 使用export -p查找导出的变量。
  2. Grep查看脚本中的declare关键字。
  3. 循环通过declare -F和grep进行声明语句或变量赋值。
  4. 解析set的输出以排除您了解的变量和函数,然后调查其余部分。
  5. 这些都不是全面的解决方案,我担心。但是为了让你开始:

    # Find declare statements in functions.
    for func in $( declare -F | awk '{print $NF}' ); do
        type "$func" | fgrep declare
    done
    

    希望有所帮助!