【发布时间】:2017-03-27 08:44:45
【问题描述】:
变量"a=b" 包含1 个字符'a' 作为名称,1 个字符'b' 作为值。
共 2 个字节。
How many characters can you store with one byte ?
变量需要一个指针。 8 个字节。
How many bytes do pointers take up ?
共 10 个字节。
存储在内存中的变量"a=b" 是否需要大约 10 个字节? 10 个相同大小的变量会占用大约 100 个字节吗?
所以 1000 个 1000 字节的变量几乎是 1MB 的内存?
我有一个只包含变量的文件 data.sh。 我需要检索该文件中一个变量的值。 我通过使用一个函数来做到这一点。 (由“'function-name' 'datafile-name' 'variable-name'”调用)
#!/usr/pkg/bin/ksh93
readvar () {
while read -r line
do
typeset "${line}"
done < "${1}"
nameref indirect="${2}"
echo "${indirect}"
}
readvar datafile variable
函数逐行读取文件data.sh。 虽然这样做是排版每一行。 做完之后, 它从函数调用中的变量名进行名称引用, 到文件 data.sh 的变量之一。 最后打印该变量的值。
函数完成后不再占用内存。 但只要函数在运行它就可以。
这意味着文件 data.sh 中的所有变量都存储在内存中。
对吗?
实际上,我有一个文件,其中 ip-addresses 作为变量名,昵称作为值。所以我想这不会是内存上的问题。但是,如果我也将它用于访问者的帖子,变量值将会更大。但是有可能让这个函数每次只在内存中存储 10 个变量。 但是我想知道我计算变量的内存使用量的方法是否有意义。
编辑:
这可能是避免将整个文件加载到内存中的解决方案。
#!/bin/ksh
readvar () {
input=$(print "${2}" | sed 's/\[/\\[/g' | sed 's/\]/\\]/g')
line=$(grep "${input}" "${1}")
typeset ${line}
nameref indirect="${2}"
print "${indirect}"
}
readvar ./test.txt input[0]
用输入test.txt
input[0]=192.0.0.1
input[1]=192.0.0.2
input[2]=192.0.0.2
还有输出
192.0.0.1
编辑:
当然!!! 在原帖中 Bash read array from an external file 它说:
# you could do some validation here
所以:
while read -r line
do
# you could do some validation here
declare "$line"
done < "$1"
行将在条件下被声明(或在 ksh 中排版)。
【问题讨论】: