Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Строковые операции

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

$ {#параметр}

расширяется до длины строки, содержащейся в параметр. Как обычно, параметр это строка; однако, если параметр либо @ or *, то расширение дает количество позиционных параметров.



[я @ linuxbox ~] $ foo="Эта строка длинная."

[я @ linuxbox ~] $ echo "'$foo' состоит из ${#foo} символов."

«Эта строка длинная». имеет длину 20 символов.

[я @ linuxbox ~] $ foo="Эта строка длинная."

[я @ linuxbox ~] $ echo "'$foo' состоит из ${#foo} символов."

«Эта строка длинная». имеет длину 20 символов.


${параметр:смещение}

${параметр:смещение: }

Эти расширения используются для извлечения части строки, содержащейся в параметр. Добыча начинается в смещение символов с начала строки и продолжается до конца строки, если только указан.


[я @ linuxbox ~] $ foo="Эта строка длинная."

[я @ linuxbox ~] $ эхо ${foo:5}

строка длинная.

[я @ linuxbox ~] $ эхо ${foo:5:6}

string

[я @ linuxbox ~] $ foo="Эта строка длинная."

[я @ linuxbox ~] $ эхо ${foo:5}

строка длинная.

[я @ linuxbox ~] $ эхо ${foo:5:6}

string


Если значение смещение является отрицательным, считается, что он начинается с конца строки, а не с начала. Обратите внимание, что отрицательным значениям должен предшествовать пробел, чтобы избежать путаницы с ${параметр:-слово} расширение. , если он присутствует, не должен быть меньше нуля.

If параметр is @, результат разложения позиционные параметры, начиная с

смещение.



[я @ linuxbox ~] $ foo="Эта строка длинная."

[я @ linuxbox ~] $ эхо ${foo: -5}

долго.

[я @ linuxbox ~] $ эхо ${foo: -5:2}

lo

[я @ linuxbox ~] $ foo="Эта строка длинная."

[я @ linuxbox ~] $ эхо ${foo: -5}

долго.

[я @ linuxbox ~] $ эхо ${foo: -5:2}

lo


${параметр#описания}

${параметр##описания}

Эти расширения удаляют начальную часть строки, содержащейся в параметр определяется описания. описания является подстановочным знаком, подобным тем, которые используются в расширении имени пути. Отличие этих двух форм в том, что # form удаляет самое короткое совпадение, а ## form удаляет самое длинное совпадение.



[я @ linuxbox ~] $ foo=файл.txt.zip [я @ linuxbox ~] $ эхо ${foo#*.} txt.zip

[я @ linuxbox ~] $ эхо ${foo##*.}

застежка-молния

[я @ linuxbox ~] $ foo=файл.txt.zip [я @ linuxbox ~] $ эхо ${foo#*.} txt.zip

[я @ linuxbox ~] $ эхо ${foo##*.}

застежка-молния


${параметр%описания}

${параметр%%описания}

Эти расширения аналогичны # и ## выше, за исключением того, что они удаляют текст с конца строки, содержащейся в параметр а не с самого начала.



[я @ linuxbox ~] $ foo=файл.txt.zip

[я @ linuxbox ~] $ foo=файл.txt.zip


[я @ linuxbox ~] $ эхо ${foo%.*}

file.txt

[я @ linuxbox ~] $ эхо ${foo%%.*}

файл

[я @ linuxbox ~] $ эхо ${foo%.*}

file.txt

[я @ linuxbox ~] $ эхо ${foo%%.*}

файл


${параметр/описания/string}

${параметр//описания/string}

${параметр/#описания/string}

${параметр/%описания/string}

Это расширение выполняет поиск и замену содержимого параметр. Если найден текст, соответствующий подстановочному знаку описания, он заменяется содержимым string. В нормальной форме только первое вхождение описания заменяется. в // форма, все вхождения заменяются. То /# форма требует, чтобы совпадение происходило в начале строки, а /% form требует совпадения в конце строки. В каждой форме /string может быть опущен, в результате чего текст, совпадающий с описания быть удаленным.



[я @ linuxbox ~] $ foo=JPG.JPG [я @ linuxbox ~] $ эхо ${foo/JPG/jpg} jpg.JPG

[я @ linuxbox ~] $ эхо ${foo//JPG/jpg}

jpg.jpg

[я @ linuxbox ~] $ эхо ${foo/#JPG/jpg}

jpg.JPG

[я @ linuxbox ~] $ эхо ${foo/%JPG/jpg}

JPG.jpg

[я @ linuxbox ~] $ foo=JPG.JPG [я @ linuxbox ~] $ эхо ${foo/JPG/jpg} jpg.JPG

[я @ linuxbox ~] $ эхо ${foo//JPG/jpg}

jpg.jpg

[я @ linuxbox ~] $ эхо ${foo/#JPG/jpg}

jpg.JPG

[я @ linuxbox ~] $ эхо ${foo/%JPG/jpg}

JPG.jpg


Расширение параметров полезно знать. Расширения для работы со строками можно использовать вместо других распространенных команд, таких как СЕПГ и вырезать. Расширения могут повысить эффективность скриптов, исключив использование внешних программ. В качестве примера мы изменим самое длинное слово программа, обсуждавшаяся в предыдущей главе, для использования расширения параметра ${#j} вместо подстановки команды $ (эхо

-n $j | wc -c) и полученную подоболочку, например так:


#! / Bin / Баш

# longest-word3: найти самую длинную строку в файле для i; делать

если [[-r $ i]]; тогда max_word = max_len = 0

#! / Bin / Баш

# longest-word3: найти самую длинную строку в файле для i; делать

если [[-r $ i]]; тогда max_word = max_len = 0


для j в $(строки $i); делать

лен=${#j}

если ((len> max_len)); тогда max_len = $ len max_word = $ j

fi

сделанный

echo "$ i: '$ max_word' ($ max_len символов)"

фи сделано

для j в $(строки $i); делать

лен=${#j}

если ((len> max_len)); тогда max_len = $ len max_word = $ j

fi

сделанный

echo "$ i: '$ max_word' ($ max_len символов)"

фи сделано


Далее мы сравним эффективность двух версий, используя время команда:



[я @ linuxbox ~] $ время самое длинное слово2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 символов)

[я @ linuxbox ~] $ время самое длинное слово2 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 символов)


реальные

пользователь

0m3.618s

0m1.544s

реальные

пользователь


система 0m1.768s

[я @ linuxbox ~] $ время самое длинное слово3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 символов)

система 0m1.768s

[я @ linuxbox ~] $ время самое длинное слово3 dirlist-usr-bin.txt

dirlist-usr-bin.txt: 'scrollkeeper-get-extended-content-list' (38 символов)


реальные

пользователь

0m0.060s

0m0.056s

реальные

пользователь


система 0m0.008s

система 0m0.008s


изображение

Исходная версия скрипта сканирует текстовый файл за 3.618 секунды, в то время как новая версия, использующая расширение параметра, занимает всего 0.06 секунды.-очень значительное улучшение.


Лучшие облачные вычисления для ОС в OnWorks: