変数"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があります。 そのファイル内の1つの変数の値を取得する必要があります。 私はこれを関数を使って行います。 (「『関数名』 『のデータ・ファイル名』 『変数名』」で呼ばれる)
#!/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ファイルの変数の1つに代入します。 最終的にその変数の値を出力するには。
この機能が終了すると、メモリを使い果たしなくなります。 ただし、関数が実行されている間は実行されます。
これは、data.shファイル内のすべての変数がある時点でメモリに格納されていることを意味します。
正しいですか?
実際、変数名としてip-addresses、値としてニックネームを持つファイルがあります。だから私はこれが記憶上のそのような問題ではないと思います。しかし、これを訪問者の投稿にも使用すると、変数の値はより大きなサイズになります。しかし、この関数には、毎回メモリ内に10変数しか格納されないようにすることが可能です。 しかし、変数のこのメモリ使用量を計算する私のやり方が意味をなさないのではないかと思います。
編集:
これは、ファイル全体をメモリに読み込まないようにするためのソリューションです。
input[0]=192.0.0.1
input[1]=192.0.0.2
input[2]=192.0.0.2
と出力
192.0.0.1
編集のtest.txt入力して
#!/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]
:もちろん
!元のポストで 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で植字)条件下であろう。
[OK]を、おかげで、私が思うに、次はあなたの方法それをやって解決策かもしれません!/$ [grep "$ {input}" "$ {1}") typeset $ {/ \\ [/ g '| sed' s/\]/\\]/g ' ライン} nameref間接= "$ {2}" プリント "$ {間接}" }入力./test.txt readvar [0] ''入力test.txtの入力データファイルと[0] = 192.0 .0.1 '出力:' 192.0.0.1' :) – azbc