Memiliki masalah dengan karakter penghitungan skrip shell

11

Saya mencoba mempelajari dasar-dasarnya dan saya mengalami masalah dengan skrip saya menghitung karakter input pengguna. Ini skrip saya, bisakah seseorang menunjukkan kesalahan saya?

#!/bin/bash

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

Jawaban:

12

setiap awal adalah sulit:

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

khusus, tidak boleh ada ruang di sekitarnya =dan perintah yang terpisah perlu dimasukkan di dalamnya $(...). Juga, Anda mungkin ingin menulis variabel Anda dalam tanda kutip "menggunakan sintaks ini "${INPUT}", ini memastikan bahwa variabel tidak disengaja secara tidak sengaja dengan yang berikut dan dapat berisi karakter khusus (misalnya baris baru \n).

Sebastian
sumber
1
Terima kasih kode saya berfungsi sekarang, dan bantuan tambahan akan membantu saya di masa depan. Terima kasih
Jack Slater
@Gnouc Terima kasih atas hasil edit yang mendalam ini! masih belajar ...
Sebastian
maaf untuk referensi di masa mendatang dapatkah Anda memberi tahu saya apa yang dilakukan -n dan LC_ALL = C.UTF-8 karena saya ingin tahu tujuannya. Terima kasih
Jack Slater
1
untuk menemukan arti dari saklar baris perintah, coba gunakan manperintah (dalam hal ini man echo: -n do not output trailing newline). Doa yang sering manakan memajukan keterampilan linux Anda dengan cepat. Untuk info lebih lanjut LC_ALL, lihat pertanyaan / jawaban ini
Sebastian
1
salin dari tautan: Anda biasanya menjalankan perintah LC_ALL=Cuntuk menghindari pengaturan pengguna yang mengganggu skrip Anda. Misalnya, jika Anda ingin [a-z]mencocokkan 26 karakter ASCII dari a hingga z, Anda harus mengaturLC_ALL=C
Sebastian
8

Saya pikir sebaiknya menggunakan

len=${#INPUT_STRING}

karena jika tidak, karakter akhir baris yang ditambahkan oleh gema akan dihitung juga. Kecuali jika itu yang Anda inginkan.

bfloriang
sumber
Saya setuju, ini lebih pendek dan lebih cepat.
Franki