Isso pode muito bem ser estupidez da minha parte. Gostaria de aceitar respostas Sim / Não, Verdadeiro / Falso no meu script 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
Aqui estão alguns resultados de amostra:
./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 Não
User passed in No
Decline
Agora o saltador. Por que [[ "${OPTARG^^}" == "N" ]]
retornar true para qualquer string?
./test.sh Sim
User passed in Yes
Decline
./test.sh ThisShouldNotMatch
User passed in ThisShouldNotMatch
Decline
Respostas:
Este:
Corresponderá a qualquer string, a menos que sejam apenas dígitos. Usar:
Em vez de.
fonte
Embora o problema em seu código tenha sido bem explicado por goldilocks , não resisto a dizer que seu código é desnecessariamente longo. Você poderia simplificá-lo muito.
O seguinte é equivalente ao código desejado:
Você também pode querer consultar Construções Condicionais no manual .
fonte
Você também pode usar
case
fonte