Bash 确定全局使用哪些变量
我正在尝试重构一些冗长的shell脚本,我想消除在函数中声明但全局使用的任何变量。有没有办法快速找到这些变量 或者,有没有办法快速找出哪些变量在使用时是空的?这样,我就可以在函数中键入所有变量,并快速查看所有全局使用的变量的列表(带有一些误报,但我可以清除这些变量)Bash 确定全局使用哪些变量,bash,shell,ksh,Bash,Shell,Ksh,我正在尝试重构一些冗长的shell脚本,我想消除在函数中声明但全局使用的任何变量。有没有办法快速找到这些变量 或者,有没有办法快速找出哪些变量在使用时是空的?这样,我就可以在函数中键入所有变量,并快速查看所有全局使用的变量的列表(带有一些误报,但我可以清除这些变量) 谢谢。我不知道这里有什么真正的捷径,但肯定有一些步骤可以让你更系统地探索你的脚本 使用export-p查找导出的变量 Grep用于脚本中的declare关键字 通过declare-F和grep循环declare语句或变量赋值 解析s
谢谢。我不知道这里有什么真正的捷径,但肯定有一些步骤可以让你更系统地探索你的脚本
export-p
查找导出的变量declare
关键字declare-F
和grep循环declare语句或变量赋值set
的输出以排除您知道的变量和函数,然后调查其余部分# Find declare statements in functions.
for func in $( declare -F | awk '{print $NF}' ); do
type "$func" | fgrep declare
done
希望有帮助 我不知道这里有什么真正的捷径,但肯定有一些步骤可以让你更系统地探索你的脚本
export-p
查找导出的变量declare
关键字declare-F
和grep循环declare语句或变量赋值set
的输出以排除您知道的变量和函数,然后调查其余部分# Find declare statements in functions.
for func in $( declare -F | awk '{print $NF}' ); do
type "$func" | fgrep declare
done
希望有帮助 您可能会发现
set-u
很有帮助。如果使用时未设置变量,shell将出错。这不会帮助您查找使用时为空字符串的变量,但会查找未设置的变量。您可能会发现set-u
很有帮助。如果使用时未设置变量,shell将出错。这不会帮助您找到使用时为空字符串的变量,但会找到未设置的变量。知道没有快捷方式也会有帮助,我只是不想在不检查预先存在的工具的情况下花费所有时间进行准备。感谢您的帮助,我将把这个问题留长一点,看看是否有人知道某个工具。请注意,declare
由bash使用,而typeset
由ksh使用(bash也支持)。此外,如果您对函数func_name(){…}
使用旧的Bourne shell语法,ksh93不会本地化变量,感谢您提到有关ksh函数语法的部分。我想知道为什么typeset没有使变量成为本地变量。知道没有捷径也会有帮助,我只是不想把所有的时间都花在准备上,而至少不检查一个预先存在的工具。感谢您的帮助,我将把这个问题留长一点,看看是否有人知道某个工具。请注意,declare
由bash使用,而typeset
由ksh使用(bash也支持)。此外,如果您对函数func_name(){…}
使用旧的Bourne shell语法,ksh93不会本地化变量,感谢您提到有关ksh函数语法的部分。我想知道为什么typeset没有将变量设置为本地变量。对于ksh,请查看-R
命令行选项ksh-R outfile脚本
对于ksh,请查看-R
命令行选项ksh-R outfile脚本
这很好,谢谢。我曾尝试使用ksh-R来运行脚本,但它似乎不像常规运行时那样观察set-u。你知道有没有一种方法可以在不执行脚本的情况下命中set-u强加的错误?再次感谢。这太好了,谢谢。我曾尝试使用ksh-R来运行脚本,但它似乎不像常规运行时那样观察set-u。你知道有没有一种方法可以在不执行脚本的情况下命中set-u强加的错误?再次感谢。