В FreeBSD sh и bash:
test="string"
len=${#test} ##Длина строки test
char1='t' ##Первый символ для поиска
pos1='echo $test | awk -vs=${char1} '{print index($0,s);}'' ##pos1=2 - найден
URL:
Обсуждается: http://www.opennet.me/tips/info/282.shtml
А вот давайте посмотрим так: запустим тогда выше описанный скриптик в SH, а не BASH!#!/bin/sh
test="string"
len=${#test}и что же он там ответит? Кто угадает - поставлю пятерочку... правильно, ответит он нам:
./1.sh: bad substitution
поэтому, Уважаемый надо либо темочку подправить на BASH или дописать сюда следущее:
len=`echo $test | wc -m`
но будте бдительны!!! от $len надо еше единичку отнять.
real_len=$[len-1]
Вот вы Васи... Работает len=${#test} прекрасно в sh!
Вот такая команда не работает len=`expr length $STR`, а ${#test} изумительно работает!
Вы как проверяли? Может сами оболочку перепутали?
Тест провожу в sh (по умолчанию на фряхе 9.1) по рутом. Может не работает из под обычного юзера, но сомневаюсь в этом и не хочу даже проверять.
Ваш пример тоже имеет право на жизнь для портабельности, только с параметром -n к echo, как вам подсказали позже.
Круче:real_len=`expr $len - 1`
printf $test | wc -m
echo text | wc -m
Обманывает - выводит на один символ большеВот вывод моего bash:
~$ echo text | wc -m
5
не надо ничего отнимать
echo надо знать команду как следуетecho -n text | wc -m