shell變數存儲在哪裡?

shell變數存儲在哪裡?

例如,如果我做了一個參數擴充:

$ b=1
$ echo $b
1

內部儲存在哪裡b?我檢查了一下,它不是一個環境變量,因為它沒有被列出printenv。我正在編寫自己的 shell 來學習 Unix,我使用哈希表作為“符號查找表”來存儲和檢索變數 - 這種方法是一個好方法還是您會建議我其他方法?

答案1

當您登入以讀取命令並執行它們時執行的 shell 會保留所有變數。如果您執行第二個 shell,那麼它將有自己的變數集合。您可以執行該set命令來查看變數清單。該set命令在 shell 內部運行,而不是啟動新進程。

環境變數要么保存在單獨的空間中,要么進行標記(如果重要,請閱讀 shell 原始程式碼),以便它們沿著 shell 運行的程式傳遞。

使用兩個哈希表對我來說似乎是合理的。

答案2

它只是程式執行期間​​的一個變數。思考這個問題的另一種方法是將您的程式重寫為以下內容。

#!/bin/bash
b=1
echo $b
exit

現在,假設您正在終端機中執行此操作,然後退出該終端會話。開啟另一個終端機會話不會顯示任何事物關於b=1上屆會議的這項任務。

這稱為“局部變數”,而不是“全域變數”。它們與許多其他功能一起使用 來顯示set

因此,如果您想查看作業,請執行下列操作

set |grep '^b='

b=1

請參見Linux 文件項目了解更多。

答案3

Shell 變數儲存在正在運行的 shell 的記憶體中。使用任何可以讓您根據名稱輕鬆找到項目的資料結構;哈希表是一個不錯的選擇。

shell變數和環境變數的差別在於環境變數放在子程序的環境中。所有環境變數都是 shell 變數。儲存它們的自然方法是建立一個雜湊表,該表不將變數名稱對應到值,而是對應到包含值和一些標誌(導出、唯讀等)的結構。

相關內容