是否有可能在C shell函数中将变量定义为静态?

时间:2014-01-02 13:23:44

标签: c linux bash shell

在C中,我可以在像这样的函数中定义一个静态变量

int func() {
    static int var=0
    .....
}

有没有与shell bash linux相同的内容?

是否可以将bash shell函数的局部变量定义为static?

5 个答案:

答案 0 :(得分:4)

使用bash你无法真正得到它(我想你想要在你的shell的几个实例之间共享一些变量......)。但是,如果切换到fish shell(使用chsh更改登录shell),则会得到所谓的通用变量,这些变量符合要求。另请参阅this answer相关问题。

顺便说一句,你应该阅读advanced bash scripting guide并考虑使用bash函数(而不是脚本)。

如果您只想在相同的 shell进程内的多个shell函数之间共享变量,那么就不要将它local声明为函数!

答案 1 :(得分:0)

你打算实际实现什么目标?如果它类似于可以在shell脚本执行之间存储值的变量,则可以使用export命令导出变量。这将使其成为全局可访问的环境变量。

与静态的情况一样,除了代码之外,您必须确保没有其他人在更新它。

答案 2 :(得分:0)

如果要在正在执行的多个脚本中使用变量,则必须将其导出到shell中,或者必须将其导出。

 . myscript

其中myscript定义了一些后来在shell中存在的变量。

答案 3 :(得分:0)

在bash中使用静态变量的唯一原因是保护它免受“编码错误”的影响,如果这成为一个问题,你就不会在每一步中测试你应该。

只需使用预定义的全局变量,并保留脚本的两个副本,即:TestScript和Script。当您测试了对TestScript的更改时,请将更改复制并粘贴到脚本中。

您还应该尽可能在VM中进行所有测试。

我已经完成了这个,我现在有一个脚本可以定制一个准系统Ubuntu 16.04 LTS服务器,包括客户端新主机名,fqdn,root和webmaster的电子邮件转发,以及安装和配置ownCloud, MariaDB 10,PHP 7,Apache 2,Webmin,mod_security,mod_evasive,tripwire,rkhunter,chkrootkit,PSAD,ClamAV,Logwatch,设置防火墙和文件权限,设置日志文件轮换,重置root密码,生成要调用的Expect脚本苍蝇,截断日志并删除生成的脚本文件,然后重新启动服务器以供使用。

我将添加其他功能,以便在安装过程中选择Samba和LDAP作为附加功能,并根据需要修改安装。

需要花费大量时间和大量测试。

答案 4 :(得分:0)

如果您希望在 bash 函数中使用静态变量并拥有 bash 脚本的生命周期,您可以在函数之前定义和初始化它,使其成为全局变量,然后在函数中使用它,无需初始化.该值将具有脚本的生命周期。

#!/bin/bash

variable=0

increment()
{
    (( variable++ ))
    echo $variable
}

while true; do
    increment
    sleep 1
done

这将输出一个递增的数字。