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

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).


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.


Saya setuju, ini lebih pendek dan lebih cepat.
Franki
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.