มีปัญหากับอักขระการนับสคริปต์เชลล์


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

@Gnouc ขอบคุณสำหรับการแก้ไขที่ลึกซึ้งนี้! ยังคงเรียนรู้ ...
เซบาสเตียน

ขออภัยสำหรับการอ้างอิงในอนาคตคุณสามารถบอกฉันได้ว่า -n ทำอะไรและ LC_ALL = C.UTF-8 เพราะฉันต้องการทราบวัตถุประสงค์ของมัน ขอบคุณ
Jack Slater

1
เพื่อค้นหาความหมายของสวิทช์บรรทัดคำสั่งให้ลองใช้manคำสั่ง (ในกรณีนี้man echo: -n do not output trailing newline) การเรียกใช้บ่อยครั้งmanจะช่วยพัฒนาทักษะ linux ของคุณอย่างรวดเร็ว สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการLC_ALLดูที่นี้คำถาม / คำตอบ
เซบาสเตียน

1
คัดลอกจากลิงค์: โดยทั่วไปคุณรันคำสั่งด้วยLC_ALL=Cเพื่อหลีกเลี่ยงการตั้งค่าของผู้ใช้เพื่อรบกวนสคริปต์ของคุณ ตัวอย่างเช่นหากคุณต้องการ[a-z]จับคู่ 26 อักขระ ASCII จาก a ถึง z คุณต้องตั้งค่าLC_ALL=C
Sebastian

8

ฉันคิดว่าน่าจะใช้

len=${#INPUT_STRING}

มิฉะนั้นอักขระสิ้นสุดบรรทัดที่เพิ่มโดย echo จะถูกนับเช่นกัน เว้นแต่ว่าเป็นสิ่งที่คุณต้องการ


ฉันเห็นด้วยมันสั้นลงและเร็วขึ้น
Franki
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.