Tener un problema con un script de shell que cuenta caracteres

11

Estoy tratando de aprender lo básico y me he encontrado con un problema con mi script contando los caracteres de la entrada de un usuario. Aquí está mi guión, ¿alguien puede señalar dónde me estoy equivocando, por favor?

#!/bin/bash

echo "Enter a word!"    
read INPUT_STRING   
len= echo $INPUT_STRING | wc -c 
echo "Your character length is " $len
exit
Jack Slater
fuente

Respuestas:

12

cada comienzo es difícil:

#!/bin/bash
read INPUT
echo $INPUT
len=$(echo -n "$INPUT" | LC_ALL=C.UTF-8 wc -m)
echo $len

específicamente, no debe haber un espacio alrededor =y un comando separado debe estar encerrado dentro $(...). Además, es posible que desee escribir sus variables entre comillas "utilizando esta sintaxis "${INPUT}", esto asegura que la variable no se concatene accidentalmente con lo que sigue y puede contener caracteres especiales (por ejemplo, líneas nuevas \n).

Sebastian
fuente
1
Gracias, mi código funciona ahora, y la ayuda adicional me ayudará en el futuro. Gracias
Jack Slater
@Gnouc ¡Gracias por esta perspicaz edición! Todavía estoy aprendiendo ...
Sebastian
perdón por futuras referencias, ¿podría decirme qué hace -n y LC_ALL = C.UTF-8 porque me gustaría saber cuál es su propósito? Gracias
Jack Slater
1
para encontrar el significado de un cambio de línea de comando, intente usar el mancomando (en este caso man echo:) -n do not output trailing newline. La invocación frecuente de manavanzará sus habilidades de Linux rápidamente. Para obtener más información sobre LC_ALL, vea esta pregunta / respuesta
Sebastian
1
copiar del enlace: generalmente ejecuta un comando LC_ALL=Cpara evitar que la configuración del usuario interfiera con su script. Por ejemplo, si desea [a-z]hacer coincidir los 26 caracteres ASCII de la a a la z, debe configurarLC_ALL=C
Sebastian
8

Creo que preferiblemente sería usar

len=${#INPUT_STRING}

de lo contrario, también se contará el carácter final de línea agregado por echo A menos que eso sea lo que quieras.

bfloriang
fuente
Estoy de acuerdo, es más corto y más rápido.
Franki