Saya harus memverifikasi panjang variabel yang dibaca (batas skrip saya hingga lima karakter yang dimasukkan), saya memikirkan sesuatu seperti ini:
#!/bin/bash
read string
check=${#string}
echo $check
if [ $check -ge 5 ]; then echo "error" ; exit
else echo "done"
fi
apakah ada solusi yang lebih "elegan"?
/bin/sh
. Anda harus mempertimbangkan untuk mengubah garis shebang#!/bin/sh
sehingga akan lebih portabel dan berjalan di lingkungan di mana bash tidak tersedia. Plus,/bin/sh
mungkin shell yang lebih ringan seperti dasbor yang tidak dibebani dengan fitur yang dimaksudkan untuk penggunaan interaktif.dash
's${#string}
akan memberikan panjang di jumlah byte bukan karakter.Jawaban:
Lebih elegan? Tidak
Singkat? Iya nih :)
Dan jika Anda tidak memiliki masalah dalam memperdagangkan lebih banyak keanggunan dengan tujuan menjadi lebih pendek, Anda dapat memiliki skrip dengan 2 baris lebih sedikit:
Anda bisa menggunakan kurung ganda jika Anda pikir itu lebih aman. Penjelasan di sini .
sumber
Alternatif Bourne-kompatibel (
${#string}
POSIX tetapi bukan Bourne (bukan bahwa Anda mungkin pernah menemukan shell Bourne hari ini)):Perhatikan bahwa untuk keduanya
${#string}
dan????
, apakah itu jumlah byte atau karakter akan tergantung pada shell. Umumnya (dan itu diperlukan oleh POSIX), itu adalah jumlah karakter. Tetapi untuk beberapa shell sepertidash
itu tidak sadar multi-byte, itu akan menjadi byte sebagai gantinya.Dengan
mksh
, Anda perluset -o utf8-mode
(di lokal UTF-8) agar dapat memahami karakter multi-byte:sumber
echo Too long
berbeda di bawah tenda dariecho 'Too long'
if
pilihan saya :)echo Too long
meneruskan dua argumen (Too
danlong
)echo
yangecho
keluarannya dipisahkan oleh spasi (dan diikuti oleh baris baru), sementara diecho 'Too long'
, kami meneruskan satuToo long
argumenecho
yang ditampilkan berikut oleh baris baru. Jadi itu setara dengan functionnaly.