programing

Bash 조건: 표현식 "및" 방법은?([! -z $VAR & -e $VAR ]의 경우)

goodcopy 2023. 4. 8. 11:30
반응형

Bash 조건: 표현식 "및" 방법은?([! -z $VAR & -e $VAR ]의 경우)

"그리고" 테스트를 어떻게 해야 할지 잘 모르겠군요.나는 잘 맞는 논쟁이 존재하는지 확인하고 싶었다.[ -e $VAR ]그러나 빈 문자열에서도 true로 평가되고 있는 것을 알 수 있었습니다.

어떻게 하면 함께 할 수 있을까요?아니면 제가 원하는 것을 성취하는 단항 테스트가 또 있나요?

if [ ! -z "$var" ] && [ -e "$var" ]; then
      # something ...
fi

에서bashmanpage:

[[ expression ]]- 조건식의 평가에 따라 0 또는 1의 상태를 반환합니다.

식에 대한 옵션 중 하나는 다음과 같습니다.

expression1 && expression2- 둘 다 맞는 경우expression1그리고.expression2사실이야.

그래서 할 수 있다and다음과 같이 조합합니다.-n와는 정반대이다-z그래서 우리는 이 모든 것을 없앨 수 있다.!):

if [[ -n "$var" && -e "$var" ]] ; then
    echo "'$var' is non-empty and the file exists"
fi

하지만 이 경우에는 그럴 필요가 없다고 생각합니다.-e xyzzytrue가xyzzy 파일이 존재하며 빈 문자열을 쉽게 처리할 수 있습니다.그게 네가 원하는 거라면, 사실 넌 그런 거 필요 없어-z비어 있지 않은 검사:

pax> VAR=xyzzy
pax> if [[ -e $VAR ]] ; then echo yes ; fi
pax> VAR=/tmp
pax> if [[ -e $VAR ]] ; then echo yes ; fi
yes

즉, 다음 명령어를 사용합니다.

if [[ -e "$var" ]] ; then
    echo "'$var' exists"
fi
if [ -n "$var" -a -e "$var" ]; then
    do something ...
fi

 

변수를 간단히 인용합니다.

[ -e "$VAR" ]

이 값은 다음과 같습니다.[ -e "" ]한다면$VAR비어 있습니다.

버전이 다음과 같이 평가되므로 작동하지 않습니다.[ -e ]이 경우 bash는 단순히 단일 인수(-e)는 공백이 아닌 문자열입니다.

manpage부터:

test 및 [인수의 수에 따라 일련의 규칙을 사용하여 조건식을 평가합니다.]...

인수 1개

이 식은 인수가 null이 아닌 경우에만 true입니다.

(또한 이 솔루션에는 공백이 포함된 파일 이름을 사용할 수 있는 이점이 있습니다.)

이제 답을 찾았어요.제안해 주셔서 감사합니다!

for e in ./*.cutoff.txt; do
if grep -q -E 'COX1|Cu-oxidase' $e
then
    echo xyz >$e.match.txt
else
    echo
fi

if grep -q -E 'AMO' $e
then
    echo abc >$e.match.txt
else
    echo
fi; done

그것에 대한 소감은요?두 번 그리핑하는 건 비효율적인 것 같지만, 효과가 있어...

언급URL : https://stackoverflow.com/questions/8920245/bash-conditionals-how-to-and-expressions-if-z-var-e-var

반응형