Problem mit einem Shell-Skript, das Zeichen zählt

11

Ich versuche, die Grundlagen zu erlernen, und bin auf ein Problem mit meinem Skript gestoßen, bei dem die Zeichen der Benutzereingaben gezählt werden. Hier ist mein Skript. Kann jemand bitte darauf hinweisen, wo ich falsch liege?

#!/bin/bash

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

Antworten:

12

Aller Anfang ist schwer:

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

Insbesondere darf kein Raum um ihn herum vorhanden sein, =und ein separater Befehl muss darin eingeschlossen sein $(...). Möglicherweise möchten Sie Ihre Variablen auch in Anführungszeichen "mit dieser Syntax schreiben. "${INPUT}"Dadurch wird sichergestellt, dass die Variable nicht versehentlich mit dem Folgenden verkettet wird und Sonderzeichen (z \n. B. Zeilenumbrüche ) enthalten kann.

Sebastian
quelle
1
Vielen Dank, dass mein Code jetzt funktioniert und die zusätzliche Hilfe mir in Zukunft helfen wird. Vielen Dank
Jack Slater
@Gnouc Vielen Dank für diese aufschlussreiche Bearbeitung! lernt noch ...
Sebastian
Entschuldigung für zukünftige Referenz. Können Sie mir sagen, was das -n tut und LC_ALL = C.UTF-8, weil ich gerne wissen würde, wozu es dient? Vielen Dank
Jack Slater
1
die Bedeutung eines Befehlszeilenschalter zu finden, die versuchen , die Verwendung von manBefehl (in diesem Fall man echo: -n do not output trailing newline). Durch häufiges Aufrufen von manwerden Ihre Linux-Kenntnisse schnell verbessert. Weitere Informationen LC_ALLfinden Sie in dieser Frage / Antwort
Sebastian
1
Von Link kopieren: Sie führen im Allgemeinen einen Befehl mit aus LC_ALL=C, um zu vermeiden, dass die Einstellungen des Benutzers Ihr Skript stören. Wenn Sie beispielsweise [a-z]die 26 ASCII-Zeichen von a bis z abgleichen möchten , müssen SieLC_ALL=C
Sebastian
8

Ich denke vorzugsweise wäre zu verwenden

len=${#INPUT_STRING}

Andernfalls wird auch das durch Echo hinzugefügte Zeilenendezeichen gezählt. Es sei denn, das ist was du willst.

bfloriang
quelle
Ich stimme zu, es ist kürzer und schneller.
Franki