내 변수에는 id
각 주제의 이름이 제거되었습니다. 각 항목에 대한 특정 명령이 있으므로 다음과 같이 말하고 싶습니다.
if [[$id = s001]]; then do something. End
if [[$id = "s002"]]; then do something else. End
등등.
올바른 접근 방식은 무엇입니까? 감사합니다
답변1
이 문제를 해결하는 일반적인 방법은 case
선언을 사용하는 것입니다.
case $id in
(s001) do something
;;
(s002) do something else
do something additional
;;
(s003) do something else entirely
;;
(*) do something unexpected
;;
esac
강화할 몇 가지 구문은 다음과 같습니다.
- 나는 여는 괄호와 닫는 괄호에 옵션을 넣는 것을 좋아합니다. 괄호 닫기는 필수이지만 시각적인 균형을 선호합니다.
- 나열된 옵션 중 일치하는 옵션이 없는 경우 특정 명령을 실행하려는 경우 이
(*)
옵션은 포괄적입니다 . - 옵션과 일치하는 각 명령은
;;
;로 끝나야 합니다. 섹션을 끝내는 덜 일반적인 옵션도 있습니다. 나는 또한;;
섹션을 적절하게 끝냈는지 쉽게 알 수 있도록 '를 별도의 줄에 두는 경향이 있습니다 .
답변2
Schaller가 위에서 말했듯이 사건은 매우 빠르게 진행됩니다. 그렇지 않고 조건문을 선호한다면 다음과 같이 작성할 수 있습니다.
if [[ -n "${id}" ]]; then
if [[ "${id}" == "s001" ]]; then
echo "do something"
elif [[ "${id}" == "s002" ]]; then
echo "do something else"
fi
fi
참고: -n 테스트는 비교가 잘못되지 않도록 ID가 설정되었는지 확인하는 것입니다. 이는 재평가를 피하기 위한 조건부 래퍼입니다.