簡體   English   中英

是否可以在像 C 這樣的 shell bash 函數中將變量定義為靜態變量?

[英]Is it possible to define a variable as static in shell bash function like C?

在 C 中,我可以在這樣的函數中定義一個靜態變量

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

是否有與 shell bash linux 中相同的東西?

是否可以將 bash shell 函數的局部變量定義為靜態?

使用bash你不能真正得到它(我想你想要在你的 shell 的幾個實例之間共享一些變量......)。 但是,如果您切換到fish shell(使用chsh更改您的登錄 shell),您會得到所謂的通用變量,這有點符合要求。 另請參閱相關問題的答案

順便說一句,您應該閱讀高級 bash 腳本指南並考慮使用bash函數(而不是腳本)。

如果您只想在同一個shell 進程內的多個 shell 函數之間共享一個變量,請不要將其聲明為函數的local變量!

你打算真正實現什么? 如果它類似於可以在 shell 腳本執行之間存儲值的變量,則可以使用 export 命令導出該變量。 這將使它成為一個全局可訪問的環境變量。

與靜態的情況一樣,您必須確保除了您的代碼之外沒有其他人正在更新它。

如果要在多個正在執行的腳本中使用一個變量,則必須在 shell 中將其導出,或者必須將其作為源。

 . myscript

其中myscript定義了一些變量,這些變量隨后也將存在於 shell 中。

如果您希望在 bash 函數中使用靜態變量並擁有 bash 腳本的生命周期,您可以在函數之前定義和初始化它,使其成為全局變量,然后在函數中使用它,無需初始化。 該值將具有腳本的生命周期。

#!/bin/bash

variable=0

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

while true; do
    increment
    sleep 1
done

這將輸出一個遞增的數字。

在 bash 中使用靜態變量的唯一原因是保護它免受“錯誤編碼”的影響,如果這成為一個問題,您就不會像應該那樣在每一步進行測試。

只需使用預定義的全局變量,並保留腳本的兩個副本,即:TestScript 和 Script。 當您測試了對 TestScript 的更改后,將更改復制並粘貼到 Script 中。

如果可能,您還應該在 VM 中進行所有測試。

我已經完成了這項工作,現在我有了一個腳本,可以自定義准系統 Ubuntu 16.04 LTS 服務器以包含客戶端的新主機名、fqdn、root 和網站管理員的電子郵件轉發,並安裝和配置 ownCloud、MariaDB 10、PHP 7、Apache 2、Webmin、mod_security、mod_evasive、tripwire、rkhunter、chkrootkit、PSAD、ClamAV、Logwatch、設置防火牆和文件權限、設置日志文件輪換、重置root密碼、生成要即時調用的Expect腳本、截斷日志和刪除生成的腳本文件,然后重新啟動服務器以供使用。

我將添加附加功能以允許在安裝期間選擇 Samba 和 LDAP 作為附加功能,並根據需要修改安裝。

只是需要大量的時間和大量的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM