Возникла проблема с подсчетом символов в сценарии оболочки


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
Спасибо, мой код работает сейчас, и дополнительная помощь поможет мне в будущем. Спасибо
Джек Слэйтер,

@Gnouc Спасибо за это проницательное редактирование! все еще учусь ...
Себастьян

извините за будущие ссылки, не могли бы вы сказать мне, что делает -n и LC_ALL = C.UTF-8, потому что я хотел бы знать о его назначении. Спасибо
Джек Слэйтер,

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
Себастьян

8

Я думаю, что желательно будет использовать

len=${#INPUT_STRING}

в противном случае будет добавлен символ конца строки, добавленный echo. Если это не то, что вы хотите.


Я согласен, это короче и быстрее.
Франки
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.