Tengo que verificar la longitud de la lectura variable (mi script limita a cinco los caracteres insertados), pienso en algo como esto:
#!/bin/bash
read string
check=${#string}
echo $check
if [ $check -ge 5 ]; then echo "error" ; exit
else echo "done"
fi
¿Hay una solución más "elegante"?

/bin/sh. Debería considerar cambiar la línea shebang a#!/bin/shpara que sea más portátil y se ejecute en entornos donde bash no esté disponible. Además,/bin/shpodría ser un shell más liviano como el tablero que no está cargado con características destinadas para uso interactivo.dash's${#string}le daría la longitud en número de bytes en lugar de caracteres.Respuestas:
¿Mas elegante? No
¿Corto? Sí :)
Y si no tiene problemas para negociar más elegancia a favor de ser más corto, puede tener un script con 2 líneas menos:
Podrías usar corchetes dobles si crees que es más seguro. Explicación aquí .
fuente
Una alternativa compatible con Bourne (
${#string}es POSIX pero no Bourne (no es probable que encuentre un shell Bourne en estos días)):Tenga en cuenta que para ambos
${#string}y????, si será el número de bytes o caracteres dependerá del shell. Generalmente (y es requerido por POSIX), es el número de caracteres. Pero para algunos shells comodashese no son compatibles con varios bytes, en su lugar serán bytes.Con
mksh, necesitaset -o utf8-mode(en configuraciones regionales UTF-8) para que comprenda los caracteres de varios bytes:fuente
echo Too longdiferente bajo el capó deecho 'Too long'ifopción :)echo Too longpasa dos argumentos (Tooylong) a losechoque lasechosalidas están separadas por un espacio (y seguidas por una nueva línea), mientras que enecho 'Too long', pasamos unToo longargumento alechoque se muestra seguido por una nueva línea. Entonces es funcionalmente equivalente.