当前位置: 首页 > 知识库问答 >
问题:

bash - 如何退出函数后,变量自动清除?

冯招
2023-07-22
push(){    OPTS=$(getopt -o m:   -- "$@")    eval set -- "$OPTS"    while true; do        case "$1" in            -m)                comment=$2                shift 2;;            --)                shift 1                break;;        esac    done}

这个函数很简单,关键是执行完后,comment的变量值会保存。
push -m '1th'
函数调用完成了,看看

echo $comment1th

变量的值,如何自动清除呢?我不甘心写成下面的形式

push(){    OPTS=$(getopt -o m:   -- "$@")    eval set -- "$OPTS"    while true; do        case "$1" in            -m)                comment=$2                shift 2;;            --)                shift 1                break;;        esac    done    unset comment}

程序很大的话,unset将是一个很多的行。

共有1个答案

商辰钊
2023-07-22

只需要把 comment 声明为 局部 变量就行,bash 默认会让变量是全局的,local 可以显式声明

局部变量会在函数执行完毕后自动清除

push(){    local comment # 声明 comment 为局部变量    OPTS=$(getopt -o m:   -- "$@")    eval set -- "$OPTS"    while true; do        case "$1" in            -m)                comment=$2                shift 2;;            --)                shift 1                break;;        esac    done  }
 类似资料:
  • 我甚至无法从脚本中导出最简单的变量来在bash中工作——我错了什么? 文件test.sh: bash测试: 编辑: 我现在从答案中知道,这行不通-但是,如何在进程之间记住单个变量呢?我需要将其存储在文件中吗?

  • 问题内容: 我为提出这样一个愚蠢的问题而道歉,但是我的linux服务器陷入了“ bash”模式。当我通过终端登录时,命令行如下所示: 因此,我无法执行其他命令。如果输入“ exit”,它将关闭终端窗口。如何退出此bash模式,以便可以输入命令? 问题答案: Bash是命令行解释器。这是在Linux系统上运行命令的一种方法。 您是在说这不允许您运行输入的命令吗?使用bash运行命令时会给出什么错误或

  • 问题内容: 有时,我会在同一ipython会话中重新运行脚本,但是如果未清除变量,我会感到很惊讶。如何清除所有变量?每次我调用魔术命令%run时是否有可能强制执行此操作? 谢谢 问题答案: 似乎清除定义的变量。

  • 它输出,这让我认为变量赋值不会扫过上一个错误代码,也不会产生新的错误代码。但当我尝试这个的时候: 它输出,显然这就是返回的内容,它重写返回的。 我想知道为什么会发生这种情况,变量赋值有什么特殊性,不同于其他正常命令吗?或者仅仅是因为被认为是一个命令,只有命令替换部分才有意义? --更新-- 谢谢大家,从答案和评论中,我得到了这样一个观点:“当您使用命令替换分配变量时,退出状态就是命令的状态。”(作

  • 我对bash脚本感到困惑。 我有以下代码: 我希望能够创建一个变量名称,其中包含命令的第一个参数并带有例如的最后一行的值。 为了说明我想要什么: 那么,我应该如何定义/声明,我应该如何在脚本中调用它? 我试过、、,但我仍然感到困惑。

  • 问题内容: 我对简单地执行变量赋值并使用命令替换时命令将返回的错误代码感到困惑: 它输出,这让我认为变量赋值不会在最后一个赋值时扫掠或产生新的错误代码。但是当我尝试这样做时: 它输出,显然这是返回的内容,并覆盖的返回。 我想知道为什么会这样,变量赋值与其他普通命令有什么区别吗?还是仅仅因为原因被认为是单个命令而只有命令替换部分才有意义? -更新- 谢谢大家,在回答和评论中,我明白了“当您使用命令替