Problemi con uno script della shell che conta i caratteri


11

Sto cercando di imparare le basi e ho riscontrato un problema con il mio script che conta i caratteri dell'input di un utente. Ecco la mia sceneggiatura, qualcuno può indicare dove sto sbagliando, per favore?

#!/bin/bash

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

Risposte:


12

ogni inizio è difficile:

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

in particolare, non ci deve essere uno spazio circostante =e un comando separato deve essere racchiuso all'interno $(...). Inoltre, potresti voler scrivere le tue variabili tra virgolette "usando questa sintassi "${INPUT}", questo assicura che la variabile non sia accidentalmente concatenata con quanto segue e possa contenere caratteri speciali (ad es. Newline \n).


1
Grazie, il mio codice funziona ora e l'aiuto aggiuntivo mi aiuterà in futuro. Grazie
Jack Slater,

@Gnouc Grazie per questa modifica approfondita! sto ancora imparando ...
Sebastian,

scusa per riferimento futuro potresti dirmi che cosa fa -n e LC_ALL = C.UTF-8 perché vorrei sapere del suo scopo. Grazie
Jack Slater,

1
per trovare il significato di un'opzione della riga di comando, provare a utilizzare il mancomando (in questo caso man echo:) -n do not output trailing newline. Una frequente invocazione manfarà avanzare rapidamente le tue abilità su Linux. Per ulteriori informazioni LC_ALL, vedi questa domanda / risposta
Sebastian,

1
copia dal link: generalmente esegui un comando LC_ALL=Cper evitare che le impostazioni dell'utente interferiscano con lo script. Ad esempio, se si desidera [a-z]abbinare i 26 caratteri ASCII dalla a alla z, è necessario impostareLC_ALL=C
Sebastian

8

Penso che preferibilmente sarebbe da usare

len=${#INPUT_STRING}

in caso contrario verrà conteggiato anche il carattere di fine riga aggiunto da echo. A meno che non sia quello che vuoi.


Sono d'accordo, è più corto e più veloce.
Franki,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.