Karakterleri sayan bir kabuk komut dosyasında sorun yaşıyorsanız


11

Temel bilgileri öğrenmeye çalışıyorum ve bir kullanıcının girdisinin karakterlerini sayarak senaryomla ilgili bir sorunla karşılaştım. İşte benim senaryom, birisi nereye gittiğimi gösterebilir mi lütfen?

#!/bin/bash

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

Yanıtlar:


12

her başlangıç ​​zor:

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

özellikle, çevreleyen bir alan olmamalı =ve içine ayrı bir komut eklenmelidir $(...). Ayrıca, "bu sözdizimini kullanarak değişkenlerinizi tırnak içine almak isteyebilirsiniz "${INPUT}", bu değişkenin yanlışlıkla aşağıdakilerle birleştirilmemesini ve özel karakter (örn. Yeni satırlar \n) içermesini sağlar .


1
Teşekkür ederim kodum şimdi çalışıyor ve ek yardım gelecekte bana yardımcı olacaktır. Teşekkürler
Jack Slater

@Gnouc Bu anlayışlı düzenleme için teşekkür ederiz! hala öğreniyor ...
Sebastian

gelecekteki referans için üzgünüm -n ne yaptığını söyleyebilir misiniz ve LC_ALL = C.UTF-8 çünkü amacını bilmek istiyorum. Teşekkür ederim
Jack Slater

1
Bir komut satırı anahtarı anlamını bulmaya, kullanmayı deneyin mankomutu (bu durumda man echo: -n do not output trailing newline). Sık sık çağırma, manlinux becerilerinizi hızla geliştirecektir. Daha fazla bilgi için LC_ALLbu soruya cevap verin
Sebastian

1
bağlantıdan kopyala: Genellikle LC_ALL=Ckullanıcı ayarlarının komut dosyanızla etkileşimini önlemek için bir komut çalıştırırsınız . Örneğin [a-z], 26 ASCII karakterini LC_ALL=C
Sebastian

8

Bence tercihen kullanmak

len=${#INPUT_STRING}

aksi halde echo tarafından eklenen satır sonu karakteri de sayılır. İstediğiniz bu olmadığı sürece.


Katılıyorum, daha kısa ve daha hızlı.
Franki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.