如何 'free' 内存分配给 shell 中的变量

How to 'free' memory allocated to a variable in shell

function mem(){
local token
return $token
}

obj=$(ls)                      #list of object name
objstr=($obj)                  #array[i] whose ith element is object name
objno=$(echo "$obj" | wc -w)   #the number of object name

for i in $(seq 0 $(($objno-1)))
do
    objID=${objstr[$i]}    #object name
    IDlen=${#objID}        #length of object name
    for j in $(seq 0 $(($IDlen-1)))
    do
        subID=${objID:$j:1}        #charater in the name
        token=$(mem)               #allocate local variable returned
        token[0]+=$subID           #concatenate characters
    done

我想定义一个可以存储对象名称的变量。 (以一种我可以访问名称中每个字符的方式) 但最重要的是它必须是一次性的。 我想 'free' 在继续使用另一个对象名称之前分配给变量的内存以最小化开销。 所以我定义了一个函数 mem() ,它将 return 局部变量。 如果我每次在使用它之前将 token[0] 初始化为 returned 变量, 先前分配给变量的内存会发生什么变化? 'free'是否按预期编辑?

您没有在 shell 中释放内存;没有明确的方法来释放诸如变量存储之类的东西。也就是说,你可以试试

  • 如果您的 shell 支持,则使用局部变量;当他们超出范围时,他们可能会被释放
  • unset NAME 完成后 NAME

请注意,就像在 C 中一样,这不能保证内存返回到 OS。

但是,你为什么首先要担心 shell 变量 的内存?您的实际问题是什么?如果内存使用和管理是一个约束,也许 shell 是错误的工具?