例如,如果我做了一個參數擴充:
$ 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 變數。儲存它們的自然方法是建立一個雜湊表,該表不將變數名稱對應到值,而是對應到包含值和一些標誌(導出、唯讀等)的結構。