조건부 차이/테스트

조건부 차이/테스트

파일에 "mail"이라는 문자열이 포함되어 있는지 테스트해야 한다고 가정해 보겠습니다. 두 문자열의 차이점은 무엇입니까?

if grep -q "mail" "file"; then ...


if [ $( grep -l "mail" "file") ]; then ...

[ grep -l "mail" "file" ] && ..

이들에 차이점이 있습니까? 아니면 전체적으로 동일합니까(예: 내부적으로나 명령의 어떤 조건에서도 동일한 결과가 발생하는 것처럼)

답변1

if command; then ...

평가의 종료 상태입니다 command. 0은 성공을 나타냅니다(조건이 true로 평가됨).

첫째: [와 거의 동일하므로 문자열이 해당 구문을 준수할 것으로 test예상합니다 .command

if [ $(command) ]; then ...

출력을 포함하는 문자열을 계산합니다 command. 대부분의 경우 작동하지 않습니다. 아래 예를 참조하세요.

[ command ] && ..

grep -l "mail" "file"다음과 같이 설명됩니다.

  • grep- 문자열
  • -l- 단항 연산자는 다음 문자열의 길이를 반환합니다.
  • "mail"-l- 연산자 에 인수로 전달될 문자열
  • "file"- 문자열

구현에 따라 약간 다른 오류가 발생합니다. 위의 경우 [연산자 없이 문자열, 숫자 및 다른 문자열로 구성된 시퀀스를 평가해야 하기 때문입니다. 기본적으로 [(및 )는 쉘 내장이며 test오류 메시지를 독립형 바이너리(일반적 /bin/[으로 또는 )와 /usr/bin/[비교할 수 있습니다.

관련 정보