Bash变量就像
a=8
Run Code Online (Sandbox Code Playgroud)
存储为堆内存,除非用户明确unset表示变量,否则永远不会删除它们- 因此,如果需要删除,用户本身负责删除它.
在bash 2.05中,变量通过散列表进行内部管理,其中获取散列表的内存并通过"malloc"和"free"释放.从哈希表中删除元素不会立即从哈希表中删除该元素,但会通过flush_hash_table在执行中的关键点调用的垃圾收集来清除它.
Bash 4.4版本重写了一些哈希表,并且flush_hash_table不再存在,但被一个函数替换hash_flush.
因此,不同的版本和端口可能会有不同的行为,你不应该依赖内存实际上是立即释放,即使你这样做unset,或者在编写shell脚本时期望任何特定的内存行为