LINUX.ORG.RU

[Странность][shell] Количество символов.

 


0

1
#!/bin/mksh
while :; do
	echo -n "$ "; read command
	for i in `seq 0 "$(echo $command | wc -m)"`; do
		result=${command:$i:1};
		if [[ $result == 'e' ]]; Дzen
			:
		else
			:
		fi
	done
done

Почему wc -m считает количество символов начиная с нуля? Кто додумался? И можно ли result=${command:$i:1}; сразу в цикл if запихнуть?



Последнее исправление: Gordy (всего исправлений: 5)

>Почему wc -m считает количество символов начиная с нуля? Кто додумался?

У тебя спросить забыли. Надо было чтобы вылетало с возвратом 1? Или что ты хочешь?

Othniel
()
Ответ на: комментарий от Gordy

То есть ты недоволен тем что wc считает символы не с нуля? Но он как бы и не для того… Воспользуйся ${#var} и вычти единицу.

KblCb ★★★★★
()
Ответ на: комментарий от Gordy

И то. Ты совсем деревянный? Ноль символов на входе, результат — 0. Ноль, понимаешь? Ни одного. Один символ на входе, результат — 1. Русский мало-мало твоя понимать? Счет предметов твоя мало-мало школа учить?

geekless ★★
()
Ответ на: комментарий от Gordy

Да ты наркоман…

#!/bin/bash
while :; do
    echo -n "$ "; read command
    for i in `seq 0 "$((${#command} - 1))"`; do
        echo ${command:$i:1} $i
    done
done

ndtimofeev@slackbook:~/Проекты/particleicp$ bash test.sh 
$ abcd
a 0
b 1
c 2
d 3
$
KblCb ★★★★★
()
Ответ на: комментарий от Gordy

Счёт символов начинается с 0 потому что ты сказал seq начинать его с нуля и что бы там wc не вывел он начнётся с нуля.

KblCb ★★★★★
()
Ответ на: комментарий от Gordy

> Попробуй вставить в цикл for, как у меня.

Ах от оно чо. Так ты цикл используешь неправильно, а кто виноват? Ты сам и виноват. Не знаешь разницы между понятиями длина массива и максимальный индекс массива. Неуч, одним словом.

geekless ★★
()
Ответ на: комментарий от Gordy

> Последний раз повторяю. Счет символов начинается с 0, а не с 1. Что, и теперь не понял?!)

Ты программе сам указал считать с нуля. И счет начинается с нуля. Неожиданно, правда? Живо в школу.

geekless ★★
()
Ответ на: комментарий от Gordy

С нуля начинаются позиции в сабстринге средствами шелла, млин. wc считает нормально.

x3al ★★★★★
()

Бггг. Школьник-быдлокодер.

Jotun
()
Ответ на: комментарий от Gordy

Лолшто, может wc еще и самостоятельно seq 0 тебе в код написал? Так и скажи прямо: «чо этот код делает, я не знаю, списал у приятеля, а препод лабу принимать не хочет». Мы всё поймём, мы ж не звери какие.

geekless ★★
()
Ответ на: комментарий от x3al

Ну вот, ты помог миру произвести на свет еще одного быдлокодера-неуча. :(

geekless ★★
()
Ответ на: комментарий от x3al

Нет, там на zsh, а у меня на mksh. Переписывай.

Gordy
() автор топика
Ответ на: комментарий от x3al

Хотя проще выдавать i+1 тому, что таки хочет счёт с единицы. Поскольку почти везде массив (и соответственно первый символ строки) начинаются с нуля, наследие C.

x3al ★★★★★
()

Так говорят, как будто я не догадался прибавить единицу.

Gordy
() автор топика

Ошибка в ДНК, а не в wc.

#!/bin/bash
while :; do
    echo -n "$ "; read command
    for i in `seq 1 "$(echo -n $command|wc -m)"`; do
        echo ${command:$(($i - 1)):1} $i
    done
done
ndtimofeev@slackbook:~/Проекты/particleicp$ bash test.sh 
$ jsdkh
j 1
s 2
d 3
k 4
h 5
$ ^C
ndtimofeev@slackbook:~/Проекты/particleicp$ 

KblCb ★★★★★
()
Ответ на: комментарий от KblCb

> Ошибка в ДНК

это когда на шелл пишут как на Си :D циклы нинужны!

echo -n abcde | sed 's/./&\n/g' | awk '{print $0,NR}'

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.