Anda dapat menggunakan konstruksi uji [[ ]]
,, bersama dengan operator pencocokan ekspresi reguler =~
,, untuk memeriksa apakah string cocok dengan pola regex.
Untuk kasus spesifik Anda, Anda dapat menulis:
[[ $date =~ ^[0-9]{8}$ ]] && echo "yes"
Atau lebih banyak tes yang akurat:
[[ $date =~ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ]] && echo "yes"
# |^^^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^^^^^ ^^^^^^ |
# | | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ |
# | | | | |
# | | \ | |
# | --year-- --month-- --day-- |
# | either 01...09 either 01..09 end of line
# start of line or 10,11,12 or 10..29
# or 30, 31
Artinya, Anda bisa mendefinisikan regex di Bash yang cocok dengan format yang Anda inginkan. Dengan cara ini Anda dapat melakukan:
[[ $date =~ ^regex$ ]] && echo "matched" || echo "did not match"
di mana perintah setelah &&
dieksekusi jika tes berhasil, dan perintah setelah ||
dijalankan jika tes tidak berhasil.
Catatan ini didasarkan pada solusi oleh Aleks-Daniel Jakimenko di verifikasi format tanggal input Pengguna di bash .
Di shell lain Anda dapat menggunakan grep . Jika shell Anda kompatibel dengan POSIX, lakukan
(echo "$date" | grep -Eq ^regex$) && echo "matched" || echo "did not match"
Pada ikan , yang tidak sesuai dengan POSIX, Anda bisa melakukannya
echo "$date" | grep -Eq "^regex\$"; and echo "matched"; or echo "did not match"