문제

What's"오른쪽"방법을 다음과 같이 부 식?

for i in `ls $1/resources`; do
    if [ $i != "database.db" ]
    then
        if [ $i != "tiles" ]
        then
            if [ $i != "map.pdf" ]
            then
                if [ $i != "map.png" ]
                then
                    svn export -q $1/resources/$i ../MyProject/Resources/$i
...
도움이 되었습니까?

해결책

다른 솔루션의 몇 가지 일반적인 실수:http://www.pixelbeat.org/programming/shell_script_mistakes.html

  1. for i in $(ls ...) 중복/문제 그냥: for i in $1/resources*; do ...

  2. [ $i != file1 -a $1 != file2 ] 이것은 실제로는 2 개의 문제입니다.

    니다.이 $i 는 인용되지 않고,따라서 이름을 공백 문제가 발생합니다

    b. -a 는 것은 비효율적이는 경우 stating 파일이지 않기 때문에 단락(I 알 위 stating 파일).

그래서 그 대신 시도:

for i in $1/resources/*; do
    if [ "$i" != "database.db" ] &&
       [ "$i" != "tiles" ] &&
       [ "$i" != "map.pdf" ] &&
       [ "$i" != "map.png" ]; then
        svn export -q "$i" "../MyProject/Resources/$(basename $i)"
    fi
done

다른 팁

도 짧은:

for i in `ls $1/resources`; do
  if [ $i != databse.db -a $i != titles -a $i != map.pdf ]; then
    svn export -q $1/resources/$i ../MyProject/Resources/$i
  fi
done;

-a 에는 경우 식당의 부울에서 shell-테스트합니다.더 보 man test

사용하십시오 케이스 책:

for i in $(ls $1/resources); do
    case $i in
        database.db|tiles|map.pdf|map.png)
           ;;
        *)
           svn export -q $1/resources/$i ../MyProject/Resources/$i;;
    esac
done
for i in `ls $1/resources`; do
    if [ $i != "database.db" ] && [ $i != "tiles" ] && [ $i != "map.pdf" ] && [ $i != "map.png" ]; then
        svn export -q $1/resources/$i ../MyProject/Resources/$i

향후 참조를 위해,새로운[[테스트 연산자 선호합니다.허용되는 답변이 가까이고 모든 것을 언급이 적용됩니다,하지만 그 대답이 필요 많이 인용하고 전화를 여러 테스트합니다.

선호하는 방식 같은 것:

for i in $1/resources/*; do
    if [[ $i != "database.db" && $i != "tiles" &&
                $i != "map.pdf" && $i != "map.png" ]]; then
        svn export -q "$i" "../MyProject/Resources/$(basename $i)"
    fi
done
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top