Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 确定全局使用哪些变量_Bash_Shell_Ksh - Fatal编程技术网

Bash 确定全局使用哪些变量

Bash 确定全局使用哪些变量,bash,shell,ksh,Bash,Shell,Ksh,我正在尝试重构一些冗长的shell脚本,我想消除在函数中声明但全局使用的任何变量。有没有办法快速找到这些变量 或者,有没有办法快速找出哪些变量在使用时是空的?这样,我就可以在函数中键入所有变量,并快速查看所有全局使用的变量的列表(带有一些误报,但我可以清除这些变量) 谢谢。我不知道这里有什么真正的捷径,但肯定有一些步骤可以让你更系统地探索你的脚本 使用export-p查找导出的变量 Grep用于脚本中的declare关键字 通过declare-F和grep循环declare语句或变量赋值 解析s

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

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


谢谢。

我不知道这里有什么真正的捷径,但肯定有一些步骤可以让你更系统地探索你的脚本

  • 使用
    export-p
    查找导出的变量
  • Grep用于脚本中的
    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
    查找导出的变量
  • Grep用于脚本中的
    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强加的错误?再次感谢。