Dai un'occhiata al messaggio di aiuto per wc
. Il -c
opzione stampa il numero di caratteri. Il echo
Il comando include un carattere di nuova riga per impostazione predefinita. Quando wc
vede la nuova riga lo conta come un altro carattere e quindi il conteggio aggiuntivo nel risultato. Puoi aggirare questo problema utilizzando una delle alternative mostrate di seguito; -w
conta il numero di parole e -l
conta il numero di righe.
echo "k" | wc -w
echo "k" | wc -l
Puoi reindirizzare l'output di wc
a awk
per ottenere il numero di caratteri esclusi i caratteri di nuova riga:
wc <filename> | awk '{print $3-$1}'
L'output predefinito di wc
senza opzioni stampa il numero di caratteri di nuova riga (da $1 a awk), il numero di parole e il numero di caratteri (da $3 a awk) in questo ordine.
quando fai echo "k"
, il echo
comando aggiunge un carattere di nuova riga a ciò che gli hai chiesto di stampare ("k"). Puoi usare il -n
opzione per disabilitare questo:
echo -n k | wc -c
1
Per aver visto quell'invisibile carattere, puoi eseguire il dump del flusso con od
o hd
:
echo k | od -t c
0000000 k \n
echo k | hd
00000000 6b 0a |k.|
echo k | od -t a -A n
k nl
È perché stai usando echo
, che aggiunge una nuova riga alla stringa. Usa printf
invece:
$ echo k | wc -c
2
$ printf k | wc -c
1