2012-09-20 1 views
0

KSH-HP-SOL-Lin POSIX가 필요함유닉스 테스트 명령어 결합 && + ||

여러 조건이 사실인지 테스트하고 싶습니다.

가정 : $STRING가 null의 경우

if [[ $FIELDS -ne 0 && ! -z $STRING ]]; do 

이, 잘 작동하지만 가끔은이 있습니다

  • FIELDS=0
  • $STRING='' 또는 $STRING=' '

는 지금은이 하나의 공간. 먼저 두 개의 $STRING 테스트를 처리 할 수 ​​있습니까? 개념적으로, 내가 동등한 싶습니다, 나는 값이 (널 (null)과 공간 사이)로 설정되어 있으리라 믿고있어 $ STRING이 하나의 공간이 될 수 있습니다 염두에

[[ $FIELDS -ne 0 && [ ! -z $STRING || $STRING = ' ' ] ]] 
+0

을 사용하여'[['지정되지 않은 결과가 발생합니다. POSIX가 되려면'['또는'test'를 사용해야합니다. –

+0

@WilliamPursell'[[''불특정 결과를 초래하지 않습니다. 비 POSIX 호환 결과 또는 이식 가능하지 않은 결과 (예, 'bash' 또는'ksh' 또는'zsh') 또는 수행되는 모든 쉘은 결과가 무엇인지 지정합니다. – twalberg

+1

@twalberg 표준에서 인용 :'다음 단어는 일부 구현시 예약어로 인식 될 수 있습니다 (아무 문자도 인용되지 않은 경우). 지정되지 않은 결과가 발생합니다. [[]] function select' –

답변

1

당신은 테스트를 분리 할 수 ​​있습니다 : POSIX의 적합성에 대한

if [[ $FIELDS -ne 0 ]]; then 
    if [[ ! -z $STRING || $STRING == ' ' ]]; then 
    do some stuff 
    fi 
fi 
0

베어링은, 관계가있는 경우 더 쉬운 방법은 먼저 $의 STRING에 간단한 검사를 실행하는 것입니다 :

if [[ $STRING == ' ' ]] 
then 
    export STRING='' 
fi 

if [[ $FIELDS -ne 0 && ! -z $STRING ]]; do 

는 가독성을 개선하고 후속 명령에 대해 같은 추가 테스트를 수행 할 필요가 없습니다 의미합니다.

제 가정이 정확하지 않은 경우 주저하지 말고 저를 괴롭히는 단계로 보내주십시오.

1

,

if [ "$FIELDS" -ne 0 -a (! -z "$STRING" -o "$STRING" = " ") ]; then 
... 
fi