Test commands directly instead of reading $? in a bracket test

이 제품은 선택한 Datadog 사이트에서 지원되지 않습니다. ().
이 페이지는 아직 한국어로 제공되지 않습니다. 번역 작업 중입니다.
현재 번역 프로젝트에 대한 질문이나 피드백이 있으신 경우 언제든지 연락주시기 바랍니다.

Metadata

ID: bash-code-quality/avoid-indirect-exit-code-check

Language: Bash

Severity: Notice

Category: Code Style

Description

Writing a command and then testing $? in a separate [/[[/test condition is redundant and brittle: another command between them changes $?, set -e can exit before the check, and [/[[ themselves overwrite $? before the branch body runs. It is better to use if cmd; then, if ! cmd; then, or capturing the output with if ! out=$(cmd); then instead of inspecting $? in the conditional.

Non-Compliant Code Examples

#!/bin/bash
make all;
if [ $? -eq 0 ]; then :; fi
if [[ $? -ne 0 ]]; then :; fi
if [ "${?}" -eq 0 ]; then :; fi
test $? -eq 0 && echo bad
/usr/bin/test $? -eq 0

Compliant Code Examples

#!/bin/bash
if grep -q pat file; then echo ok; fi
if ! make all; then echo fail; fi
if [ -f "$f" ]; then :; fi
rc=$?
if [ "$rc" -eq 0 ]; then :; fi
echo "status was $?"
if test -n "$file"; then :; fi
/usr/bin/test -f "$path" && echo ok
https://static.datadoghq.com/static/images/logos/github_avatar.svg https://static.datadoghq.com/static/images/logos/vscode_avatar.svg jetbrains

원활한 통합. Datadog Code Security 사용해 보기