2014-02-07 4 views
0

다음 코드는 아무 것도 출력하지 않습니다.배쉬 배열이 작동하지 않습니까?

#!/bin/bash 
declare -A a 
cat input.txt | while read item value 
do 
if [ $item="owner" ] || [ $item="admin" ] || [ $item="loc" ] || [ $item="ser"] 
then 
a[$item]=$value 
fi 
done 
echo ${a[owner]} 

입력 파일은 다음과 같습니다

owner sysadmin group 
admin ajr 
loc S-309 
ser 18r97 
comment noisy fan 

나는 소유자, 관리자, LOC 및 서비스에서 인덱스 배열에게 단지를 만들어야합니다.

echo $ {a [owner]}의 출력이 sysadmin 그룹이되도록 기대하고있었습니다.

어떤 도움이 필요합니까?

EDIT : 내가 sysadmin 그룹과 관련이 있다고 생각하는데, 어떻게 공간 (2 단어)을 변수 (값)로 읽습니까?

+1

가능한 중복 http://stackoverflow.com/questions/1789750/scope-of-variable-in-pipe 우리의 실제 할당 출력하는 스크립트를 작성하는 것입니다 –

답변

1

파이프를 사용하여 하위 셸을 사용하고 있기 때문입니다. 하위 셸에서 변경 한 내용은 하위 셸에만 적용되며 부모 셸에서는 반영되지 않습니다.

사용이 :

#!/bin/bash 
declare -A a 
while read item value 
do 
    if [ $item="owner" ] || [ $item="admin" ] || [ $item="loc" ] || [ $item="ser"] 
    then 
    a[$item]=$value 
    fi 
done < input.txt 

echo ${a[owner]} 
sysadmin group 
+0

테이블에있는 것과 비슷하지만 디렉토리의 여러 파일에서 스크립트는 디렉토리 인 단일 명령 행 인수를 필요로합니다. 그래서 파일을 열고 배열에 저장하고 나중에 테이블을 호출하는이 부분을 작성하려고합니다. 내 이해에서 파이프 고양이는 여기에서 읽을 수 없는데, 어떻게해야합니까? – gptt916

+0

작업 코드를 제공했습니다. 파이프 대신'done anubhava

+0

아, 맞아, 완료 <파일은 트릭을해야한다, 나는 그 부분을 완전히 놓쳤다, 고마워! – gptt916