Você não precisa do [[ ... ]]
. Basta reescrevê-lo como:
#!/bin/bash
if read -t 10 -sp "Enter Password: " passwd; then
echo -e "\nPassword: ${passwd}"
else
echo -e "\nInput timed out" >&2
exit 1
fi
exit 0
ou para ser mais fácil de ler e / ou mais curto:
#!/bin/bash
read -t 10 -sp "Enter Password: " passwd || echo -e "\nInput timed out" >&2 && exit 1
echo -e "\nPassword: ${passwd}"
exit 0
Atualizar :
Para entender por que funciona sem [[ ... ]]
, o homem bash deve ser verificado:
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
The if list is executed. If its exit status is zero, the then list is executed. Otherwise, each elif list is executed in turn, [...]
Nesse caso, O if list
é o comando de leitura. [ $? -eq 0 ]
e test $? -eq 0
também são listas válidas com status de saída específico. [[ expression ]]
(novamente de acordo com o homem de bash) também é uma lista válida, mas read -t 10 -sp "Enter Password: " passwd
não é uma expressão válida. Veja o homem para saber o que são expressões válidas.