파일에 "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/[
비교할 수 있습니다.