Как в sh определить число символов в строке |
[исправить] |
В FreeBSD sh и bash:
test="string"
len=${#test} ##Длина строки test
char1='t' ##Первый символ для поиска
pos1='echo $test | awk -vs=${char1} '{print index($0,s);}'' ##pos1=2 - найден
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / Shell / Готовые скрипты |
1.1, merzod (?), 18:08, 04/04/2007 [ответить]
| +/– |
А вот давайте посмотрим так: запустим тогда выше описанный скриптик в SH, а не BASH!
#!/bin/sh
test="string"
len=${#test}
и что же он там ответит? Кто угадает - поставлю пятерочку... правильно, ответит он нам:
./1.sh: bad substitution
поэтому, Уважаемый надо либо темочку подправить на BASH или дописать сюда следущее:
len='echo $test | wc -m'
но будте бдительны!!! от $len надо еше единичку отнять.
real_len=$[len-1] | |
|
2.6, Saveliy (??), 03:59, 07/12/2013 [^] [^^] [^^^] [ответить]
| +/– |
Вот вы Васи... Работает len=${#test} прекрасно в sh!
Вот такая команда не работает len='expr length $STR', а ${#test} изумительно работает!
Вы как проверяли? Может сами оболочку перепутали?
Тест провожу в sh (по умолчанию на фряхе 9.1) по рутом. Может не работает из под обычного юзера, но сомневаюсь в этом и не хочу даже проверять.
Ваш пример тоже имеет право на жизнь для портабельности, только с параметром -n к echo, как вам подсказали позже.
| |
|
1.4, Николай (??), 14:30, 13/07/2011 [ответить]
| +/– |
echo text | wc -m
Обманывает - выводит на один символ больше
Вот вывод моего bash:
~$ echo text | wc -m
5
| |
1.5, mmihail (?), 18:39, 16/12/2011 [ответить]
| +/– |
не надо ничего отнимать
echo надо знать команду как следует
echo -n text | wc -m
| |
|