文字を数えるシェルスクリプトに問題がある


11

私は基本を学ぼうとしていますが、ユーザーの入力の文字をカウントするスクリプトで問題が発生しました。これが私のスクリプトですが、誰かが間違っているところを指摘できますか?

#!/bin/bash

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

回答:


12

すべての始まりは難しいです:

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

具体的には、周囲にスペースがあってはならず=、別のコマンドをで囲む必要があります$(...)。また、"この構文を使用して変数を引用符で囲む"${INPUT}"こともできます。これにより、変数が誤って後に続くものと連結されず、特殊文字(例:改行\n)を含めることができます。


1
おかげで私のコードは動作し、追加の助けが将来私を助けてくれるでしょう。ありがとう
Jack Slater 14

@Gnoucこの洞察に満ちた編集をありがとう!まだ学習中...
セバスチャン

-nの目的とLC_ALL = C.UTF-8について教えていただけませんか。その目的を知りたいので。ありがとう
Jack Slater

1
コマンドラインスイッチの意味を見つけるために、使用してみてくださいman(この場合はコマンドをman echo-n do not output trailing newline)。を頻繁に呼び出すとman、Linuxスキルが急速に向上します。の詳細についてはLC_ALL、この質問と回答を
Sebastian

1
リンクからコピー:通常LC_ALL=C、ユーザーの設定がスクリプトに干渉するのを防ぐために、コマンドを実行します。たとえば[a-z]、26のASCII文字をaからzに一致させる場合、次のように設定する必要がありますLC_ALL=C
Sebastian

8

できれば使うと思います

len=${#INPUT_STRING}

そうでなければ、エコーによって追加された行末文字も同様にカウントされます。それがあなたが望むものでない限り。


私は同意します、それは短くて速いです。
フランキー2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.