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

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. Если это не то, что вы хотите.

bfloriang
источник
Я согласен, это короче и быстрее.
Франки