Snažím se porovnat vzor data pomocí case
příkaz, ale nefunguje. Může mi někdo pomoci?
Vstup :01/05/1900
nebo 5/6/1900
Použité vyjádření případu:
ptn="[0-9]|[0-9][0-9]/[0-9]|[0-9][0-9]/[0-9][0-9]|[0-9][0-9][0-9][0-9]"
case "$dt" in
$ptn ) echo "valid pattern" ;;
*) echo "invalid"
esac
Ale vzor použitý v příkazu case se nevyhodnocuje pro výše uvedené 2 data.
Přijatá odpověď:
Zkuste to. case
rozumí pouze globům, takže manipulace s regulárním výrazem není přímočará. =~
Operátor zde však nabízí některá řešení.
#!/bin/bash
INP="01/05/1900"
ptn="^([0-9]|[0-9][0-9])/([0-9]|[0-9][0-9])/([0-9][0-9]|[0-9][0-9][0-9][0-9])$"
if [[ $INP =~ $ptn ]] ; then
echo valid pattern
else
echo invalid
fi
Pokud chcete zmenšit velikost regulárního výrazu, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$
funguje stejně dobře.
Jak dostat Ls do seznamu adresářů s koncovým lomítkem?
Linux – Získání skutečného OS pouze s otevřeným zdrojovým kódem běžícího na telefonu? Android?