एक शेल स्क्रिप्ट गिनती वर्णों के साथ एक समस्या है


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}", यह सुनिश्चित करता है कि चर गलती से इस तरह से संक्षिप्त नहीं है और इसमें विशेष वर्ण (जैसे newlines \n) हो सकते हैं ।


1
धन्यवाद अब मेरा कोड काम करता है, और अतिरिक्त मदद से मुझे भविष्य में मदद मिलेगी। साभार
जैक स्लेटर

@Gnouc इस आनंदमय संपादन के लिए धन्यवाद! अभी भी सीख रहे हैं ...
सेबस्टियन

भविष्य के संदर्भ के लिए खेद है कि आप मुझे बता सकते हैं कि एन क्या करता है और LC_ALL = C.UTF-8 क्योंकि मैं इसके उद्देश्य के बारे में जानना चाहूंगा। धन्यवाद
जैक स्लेटर

1
एक कमांड लाइन स्विच के अर्थ खोजने के लिए, का उपयोग करके देखें manआदेश (इस मामले में man echo: -n do not output trailing newline)। बार-बार होने वाला आह्वान manआपके लिनक्स कौशल को तेजी से आगे बढ़ाएगा। अधिक जानकारी के लिए LC_ALL, इस प्रश्न / उत्तर को देखें
सेबस्टियन

1
लिंक से कॉपी करें: आप आम तौर पर LC_ALL=Cअपनी स्क्रिप्ट में हस्तक्षेप करने के लिए उपयोगकर्ता की सेटिंग से बचने के लिए एक कमांड चलाते हैं । उदाहरण के लिए, यदि आप [a-z]z से 26 ASCII वर्णों का मिलान करना चाहते हैं, तो आपको सेट करना होगाLC_ALL=C
सेबस्टियन

8

मुझे लगता है कि अधिमानतः उपयोग करना होगा

len=${#INPUT_STRING}

अन्यथा प्रतिध्वनि द्वारा जोड़े गए रेखा वर्ण के अंत को भी गिना जाएगा। जब तक कि आप क्या चाहते हैं।


मैं सहमत हूं, यह छोटा और तेज है।
फ्रेंकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.