2013-08-14 2 views
0

내보낼 mongodb의 일부 콜렉션을 필터링하려고합니다. 하지만 문자열 비교가 잘못된 것 같습니다. 내 경우에는Bash 문자열 비교가 일치하지 않음

$1localhost:17017/mydb

shop 성공하지 MongoDB를의 컬렉션 중 하나지만, $i == 'shop'입니다.

#!/bin/bash 

colls=`mongo $1 --eval 'db.getCollectionNames();' | tail -1` 

IFS=',' read -ra ADDR <<< $colls 

for i in "${ADDR[@]}" 
do 
    if [[ $i == 'shop' ]] 
    then 
     echo $i 
    fi 
done 

또는 mongodb에서 지정된 모음을 내보내는 다른 방법이 있습니까?

+0

"shop"또는 "shop"과 일치 시키려고하십니까? 부분 일치가 필요하다면 * shop *에서 "case"$ i "를 할 수 있습니다) echo $ i ;; esac' ... 이상한 문자의 경우 $ i 주위에 큰 따옴표를 넣으십시오. – technosaurus

답변

1

얻은 값을 에코하여 패턴을 실제로 사용하는 방법을 확인하십시오. 또한 변수를 올바르게 인용하십시오.

#!/bin/bash 

colls=$(mongo "$1" --eval 'db.getCollectionNames();' | tail -1) 
echo "colls: $colls" 

IFS=',' read -ra ADDR <<< "$colls" 
echo "colls count: ${#ADDR[@]}" 

for i in "${ADDR[@]}" 
do 
    echo "Trying |$i|." 
    if [[ $i == 'shop' ]] 
    then 
     echo "$i" 
    fi 
done 
+0

왜" $ colls "맞습니까? – goofansu

+1

어떻게 든'$ colls '의 내용이 입력 전에'IFS'의 값으로 재평가되는 것을 막습니다. – konsolebox

관련 문제