0

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

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

谢谢。

4

2 回答 2

2

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

于 2012-06-07T14:05:58.157 回答
1

我不知道这里有什么真正的捷径,但是您当然可以采取一些步骤来更系统地探索您的脚本。

  1. 使用 查找导出的变量export -p
  2. Grep 为declare您的脚本中的关键字。
  3. 循环declare -F和 grep 用于声明语句或变量赋值。
  4. 解析 的输出set以排除您知道的变量和函数,然后调查其余部分。

恐怕这些都不是全面的解决方案。但是为了让你开始:

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

希望有帮助!

于 2012-06-07T13:23:55.617 回答