2013-04-13 1 views
0

예, 일반적으로 for 루프 또는 이와 유사한 방법을 사용하여 배열을 증가시키지 만이 시나리오에서는 이미 루프에 있으므로 하나만 설정하면됩니다 값을 배열에서 이동하십시오. 여기 코드는 다음과 같습니다 변수 발행을 사용하여 선언하는 동안 배열 요소 늘리기

n=1 
cat databases/$IPS | grep -v \# | while read LINE; do 
    ENDPOINT[$n]="`echo $LINE | cut -d":" -f1`"; 
    echo "TESTING: ${ENDPOINT[$n]}" 
    let n++ 
done 

그래서 while 루프는 플랫 파일 데이터베이스에서 여러 줄을 읽고 배열에 저장해야하는 첫 번째 콜론 구분 된 값을 가져옵니다. 이 프로젝트에서 너무 오랫동안 진흙 투성이가되고 있습니다. 나는이 부분을 재고해야 할 수도 있습니다.

그래서 다른 루프를 사용하지 않고 변수를 사용하여 요소를 증가시킬 수 있으므로 현재 while 루프에서 배열을 설정할 수 있습니다.

----- UPDATE는 -----

내가 무엇을하려고 메신저 것은 조금 이상하고 정통 보인다 알고있다. 따라서 while 루프는 데이터베이스를 한 줄씩 읽습니다. while 루프의 첫 번째 반복 동안 데이터베이스가 읽히고 데이터베이스의 첫 번째 행에있는 첫 번째 "셀"이 배열 요소 1로 배열에 저장됩니다 (또는 0 일 수도 있음). 그런 다음 while 루프는 두 번째 패스로 돌아가 데이터베이스의 두 번째 행의 첫 번째 셀을 가져오고 요소 2 아래의 배열에 저장해야합니다. 루프는 데이터베이스가 끝날 때까지 계속이 작업을 수행합니다.

그래서 루프를 사용하여 배열의 내용을 읽는 방법을 알고 있지만 결코 루프를 사용하여 배열을 설정하지 않았습니다. while 루프가 다음 패스를 수행 할 때 배열을 덮어 씌우지 않을 때 배열의 요소 번호를 가져올 수 없습니다.

도움이 되셨습니까?

----- UPDATE -----

는 그래서이 좀 작동하는 것 같습니다. 이 배열에이 데이터베이스 값을 저장하는 전체 요점은이 while 루프 내에서 사용되는 것뿐만 아니라 (무관 한 코드 생략) 때문입니다. 그러나 나는이 값들을 스크립트의 다른 곳에서 사용해야합니다.

고양이 데이터베이스/$ IPS | grep -v # | 읽는 동안 LINE; do VAR = "echo $LINE | cut -d"|" -f1"; [$ 않음] = "$의 VAR" 는 "을 heres 배열 변수 $ {ENDPOINT [$ 않음]을}"에코 ENDPOINT 수행 는

여전히 문제가 진정으로 기억되는 것이 나타나지 않는다하더라도된다 정렬. 배열의 첫 번째 요소를 덮어 쓰는 것입니다. 스크립트의 어딘가에서 더 낮은 배열 값을 반향하려고하면 배열 요소 0의 값과 데이터베이스의 마지막 항목으로 설정된 값만 나타납니다.

+0

당신이 증가 원하는 작업 ? 배열 요소를 증가시키기 위해 루프가 필요하지 않습니다. – perreal

+0

나는 전혀 질문을 이해하지 못한다. 당신은 정교 할 수 있니? –

+0

메인 게시물이 업데이트되었습니다. – Atomiklan

답변

0
나는이 별도의 프로세스이며, 배열 대신이 작업을 수행

을 완료하면 분실 될 수있다, 당신이 명령을 실행하는 것 같다

:

n=1 
endpoints=`grep -v \# databases/$IPS | cut -d":" -f1` 
for i in $endpoints; do 
    ENDPOINT[$n]=$i; 
    echo "TESTING: ${ENDPOINT[$n]}" 
    let n++ 
done 
+0

우수 감사합니다. 궁극적으로 이전 생각 프로세스와 연계되어 종료되었습니다. 수면도 도움이됩니다. 잠시 휴식을 취한 다음 다시 문제를 살펴 보았습니다. 모든 것이 지금 작동 중입니다. 고맙습니다. – Atomiklan

0

100 % 질문을 이해하지 못했습니다. while 루프 외부의 배열 요소에 액세스 할 수 없다고 가정합니다.

whilecat 명령 컨텍스트 내에서 실행되기 때문에 이는 별도의 프로세스로 시작됩니다. 배열 요소에 액세스하려면 동일한 bash 컨텍스트에서 값을 설정해야합니다.

예를 들어, 당신은 코멘트의 콜론으로 구분 된 값의 제 돌보는를 얻기 위해 sed를 사용할 수 있습니다

file_name=data 

# extract values and put it into bash array 
ENDPOINT=(`sed 's/[ \t]*#.*//g;s/^\([^:]*\):.*/\1/g' $file_name`) 

echo "size: ${#ENDPOINT[@]}" 
echo "readed data: ${ENDPOINT[@]}" 

는 또한이 변종은 매우 빠르게 while read 루프보다 훨씬이며, 다른 명령에 통화를하는.

+0

도움 주셔서 감사합니다. 나는 당신의 제안에 진심으로 감사하지만, 나는 다른 해결책을 발견 할 때 그것을 시험 할 기회를 얻지 못했다. 고맙습니다. – Atomiklan

관련 문제