Bash의 테스트 표현식인 [ 5 -gt 4 ]의 값을 어떻게 에코합니까?
[ 5 -gt 4 ] | echo
그리고
echo `[ 5 -gt 4 ]`
둘 다 결국 빈 줄을 인쇄합니다
@Thomas Dickey의 답변은 효과가 있지만 위의 두 가지가 왜 작동하지 않는지 설명할 수 있습니까?
답변1
테스트가 실행되지 않기 때문에 명령이 예상한 대로 작동하지 않습니다.산출표준 출력 스트림에 대한 모든 것. 이는 파이프라인의 다음 명령(첫 번째 명령)으로 파이프된 표준 출력 스트림이며 대체 명령 대체(두 번째 명령)의 표준 출력입니다.
그런데 첫 번째 파이프의 왼쪽이 표준 출력 스트림에서 무언가를 생성하더라도 echo
오른쪽은 이를 표시하지 않습니다. 유틸리티는 echo
표준 입력에서 읽지 않습니다(예: cat
읽습니다).
모든 쉘 명령은 종료 상태를 반환합니다. 예를 들어 명령문은 해당 종료 상태에 따라 작동합니다 if
. 종료 상태는 터미널 등에 출력되지 않습니다. 그렇지 않으면 명령이나 스크립트의 실제 출력을 방해합니다.
당신이 사용할 때
[ 3 -gt 4 ]
[
일부 매개변수를 사용하여 이 유틸리티를 호출 할 수 있습니다 . 유틸리티가 종료 상태를 반환합니다. 그것은 정확히 동일합니다
test 3 -gt 4
man test
및 man [
(또는 셸 help test
에서 )을 참조하세요 .bash
가장 최근에 실행된 명령의 종료 상태는 특수 변수에 저장됩니다 $?
.
일반 변수에 저장하거나 터미널에 출력할 수 있습니다.
[ 3 -gt 4 ]
printf 'Exit status of test was %s\n' "$?"
printf 'Exit status of printf was %s\n' "$?"
알아채다printf
반품자체 종료 상태를 생성하므로 호출이 printf
정상이면 $?
테스트 상태를 출력한 후 값이 0이 됩니다.
위의 코드는 출력될 수 있습니다
Exit status of test was 1
Exit status of printf was 0
알아채다자체 테스트여기서는 아무것도 출력하지 마세요. 종료 상태만 제공합니다.
답변2
딱 이것:
[ 5 -gt 4 ]
echo $?