2017-02-24 5 views
0

내가 변수에 정의 된 Adhoc.xcconfig 한 경우 :XCConfig 구문

if [ "${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}" = "$PREPROCESSOR_DEFINITIONS" ] ; then 
    echo "Crashlytics is disabled, skipping Crashlytics dSYM upload" 
else 
    echo "Crashlytics is on" 
end 

것을에게 문은 무엇을 확인 않는 경우

PREPROCESSOR_DEFINITIONS = IS_ADHOC=1 CRASHLYTICS=1 

및 실행 스크립트에

처럼 보이는 체크 거기를? /가 비난하기 또는 xcconfig 특정 구문 인 경우 내가 불분명 해요. 무엇도 혼란하면 if 문이 =하지 ==를 사용하여 할당의 결과를 확인하는 점이다.

조각으로 if 문 조각 부셔 :

  • "${PREPROCESSOR_DEFINITIONS}/CRASHLYTICS=1}" 것은 - 변수 확장이다.

  • / - 더 큰 변수 인 PREPROCESSOR_DEFINTIONS을 색인화하여 변수 CRASHLYTICS의 존재를 확인합니까?

  • = "$PREPROCESSOR_DEFINITIONS" - 이것은 단지 이전 식의 결과에 리터럴 문자열을 할당되어 있습니까?

구문을 밝힐 수있는 사람과 if 문이 성취하려고하는 사람은 훌륭합니다.

+0

실행 스크립트의 위치는 어디입니까? – Winter

답변

1

이것은 모든 약 bash, 파일을 xcconfig 없습니다. xcconfig 파일은 빌드 설정 만 설정합니다. 기본적으로 빌드 설정은 환경 변수로 실행 스크립트 빌드 단계로 내보내집니다. 그것이 두 사람 사이의 유일한 관계입니다. xcconfig 파일의 형식은 xcconfig 파일을 읽는 중에 만 관련이 있습니다. 매개 변수 확장에 bash 매뉴얼 페이지 섹션에서

:

$ {매개 변수/패턴/문자열}

패턴 단지 경로명 확장 에서처럼 패턴을 생성하기 위해 확장된다. 매개 변수이 확장되어 해당 값에 대한 패턴의 가장 긴 일치가 문자열으로 바뀝니다. [...] 문자열이 인 경우 패턴이 삭제되고/패턴이 생략 될 수 있습니다. [...]

그래서, "${PREPROCESSOR_DEFINTIONS/CRASHLYTICS=1}"PREPROCESSOR_DEFINTIONS를 확장하지만, 결과 문자열에서 CRASHLYTICS=1의 모든 인스턴스를 제거합니다.

단일 =

가 할당되지 않습니다. 그것은 동등한 비교입니다. 맨 페이지가 말한대로 배쉬는 또한, == 지원하지만 :

= 엄격한 POSIX 준수를위한 == 대신에 사용할 수있다.

기술적으로는 =이 더 표준입니다. PREPROCESSOR_DEFINTIONSCRASHLYTICS=1을 포함하지 않는 경우

따라서, if은 시험하고있다. 포함 된 경우 을 사용한 확장은 수정되지 않은 확장과 같지 않습니다.

물론 이것은 if의 각 분기에있는 echo 문을 감안할 때 의미가 있습니다.

+0

고마워요! 내가하고있는 프로젝트에서 기존 코드를 이해하려고 노력했습니다. 그 말이 이제는 의미가 있습니다. 훌륭한 대답입니다. – barndog