조건부로 var를 할당하고 정의 및 조건을 확인하세요.

조건부로 var를 할당하고 정의 및 조건을 확인하세요.

조건부로 변수를 할당하고 싶습니다.

이건 작동하지 않아

[[ -v $2]] && [$2 == "init" ] && command="./ops/init.sh"
[[ -v $2]] && [$2 == "destroy" ] && command="./ops/teardown.sh"
[ -z "${2}" ] && command="./ops/help.sh -h"

매개변수와 다른 조건이 존재하는지 확인하려고 하는데 구문을 제대로 알 수 없습니다.

답변1

첫 번째 -v는 zsh 확장이므로 문제는 스크립트를 실행하는 잘못된 쉘일 수 있습니다.

이를 작성하는 일반적인 방법은 Case 문을 사용하는 것입니다.

case "$2" in
    ("init") command="./ops/init.sh" ;;
    ("destroy") command="./ops/teardown.sh" ;;
    ("") command="./ops/help.sh -h" ;;
    (*) echo "$0: unknown option '$2' - expecting 'init' or 'destroy'" >&2
        exit 2 ;;
esac

여러 단어를 문자열에 넣는 것은 최선의 아이디어는 아니지만, ./ops/help.sh -h그렇게 하지 않아도 됩니다(그리고 처음에는 셸에 대해 선택의 여지가 없습니다). 대신 배열 사용을 고려해보세요.

답변2

쉘 스크립팅에서는 공백에 매우 주의해야 합니다. 너도 알아야 해[와 사이의 차이[[. 확실하지 않은 경우 bash(1) 매뉴얼을 참조하세요. 나는 추천한다주택 검사스크립트에서 일반적인 오류를 감지합니다. 귀하의 경우:

#!/bin/bash
[[ -v $2 && $2 = "init" ]] && command="./ops/init.sh"
[[ -v $2 && $2 = "destroy" ]] && command="./ops/teardown.sh"
[[ -z $2 ]] && command="./ops/help.sh -h"

하지만 이카루스가 말했듯이 case진술을 하는 것이 더 좋습니다.

관련 정보