Проблема зі сценарієм оболонки, що підраховує символи


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}

оскільки в іншому випадку кінцевий символ рядка, доданий ехо, буде також зарахований. Якщо тільки цього не хочеш.


Я згоден, це коротше і швидше.
Франки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.