변수 "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 파일이 있습니다. 해당 파일에서 하나의 변수 값을 검색해야합니다. 함수를 사용하여이 작업을 수행합니다. (" '함수 이름'데이터 파일 이름 '변수 이름'"로 불림)는
#!/usr/pkg/bin/ksh93
readvar() {
while read -r line
do
typeset "${line}"
done < "${1}"
nameref indirect="${2}"
echo "${indirect}"
}
readvar datafile variable
함수는 파일 data.sh 라인별로 라인을 판독한다. 그 동안 각 행을 typeset합니다. 이 작업을 완료 한 후 함수 호출의 변수 이름에서 이라는 이름의 참조를 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]
input[0]=192.0.0.1
input[1]=192.0.0.2
input[2]=192.0.0.2
그리고 출력
있는 test.txt192.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 조판) 조건으로된다.
좋아, 덕분에, 나는 다음은 사용자가 원하는 방식으로 일을 해결책이 될 수 있습니다 생각 :'#/빈/ksh를 readvar() { 입력 = $ (인쇄 "$를 {2}"| 나오지도의/$ [grep "$ {input}" "$ {1}") typeset $ {/ \\ [/ g ' 라인} nameref 간접 = "$ {2}" 인쇄 "$ {} 간접" } 입력 ./test.txt readvar [0] 입력''TEST.TXT 입력 데이터 파일과 [0] = 192.0 .0.1'출력 :'192.0.0.1' :) – azbc