To bardzo dobrze może być z mojej strony głupota. Chciałbym zaakceptować odpowiedzi Tak / Nie, Prawda / Fałsz w moim skrypcie Bash:
test.sh
#!/bin/bash
ARGUMENT=$1
echo User passed in $ARGUMENT
OPTARG=${ARGUMENT:0:1}
if [[ "$OPTARG" -eq 0 ]] || [[ "${OPTARG^^}" == "N" ]]; then
echo Decline
elif [[ "$OPTARG" -eq 1 ]] || [[ "${OPTARG^^}" == "Y" ]]; then
echo Accept
else
echo Invalid argument
fi
Oto kilka przykładowych wyników:
./test.sh 0
User passed in 0
Decline
./test.sh 1
User passed in 1
Accept
./test.sh 2
User passed in 2
Invalid argument
./test.sh Nie
User passed in No
Decline
Teraz stumper. Dlaczego [[ "${OPTARG^^}" == "N" ]]
zwracanie wartości true dla dowolnego ciągu !?
./test.sh Tak
User passed in Yes
Decline
./test.sh ThisShouldNotMatch
User passed in ThisShouldNotMatch
Decline
Odpowiedzi:
To:
Dopasuje dowolny ciąg, chyba że są to tylko cyfry. Posługiwać się:
Zamiast.
źródło
Chociaż problem w twoim kodzie został dobrze wyjaśniony przez goldilocks , nie mogę się oprzeć stwierdzeniu, że twój kod jest niepotrzebnie długi. Możesz to bardzo uprościć.
Poniższy kod odpowiada żądanemu kodowi:
Możesz także zapoznać się z Konstrukcjami warunkowymi w instrukcji .
źródło
Możesz także użyć
case
źródło