2016-08-02 3 views
0

У меня есть строка, например time=1234, и я хочу извлечь только номер после знака =. Однако это число может находиться в диапазоне от 0 до 100000 (например, - time=1, time=23, time=99999 и т. Д.).Поиск подстроки переменной длины в bash

Я пробовал такие вещи, как $(string:5:8}, но это будет работать только для примеров определенной длины.

Как получить подстроку всего после знака =? Я бы предпочел сделать это без внешних команд, таких как cut или awk, потому что я буду запускать этот скрипт на устройствах, которые могут иметь или не иметь этих функций. Я знаю, что есть примеры использования внешних функций, но я пытаюсь найти решение без его использования.

ответ

6
s=time=1234 
time_int=${s##*=} 
echo "The content after the = in $s is $time_int" 

Это расширение параметр сопоставления все соответствующие *= от передней части переменной - таким образом, все вплоть до последнего =.

Если вы намерены это быть не жадный (то есть, чтобы удалить только содержимое до первого=, а не последний=), используйте ${s#*=} - один #, а не два.


Ссылки:

2

если time= часть constan т вы можете удалить префикс с помощью ${str#time=}

Допустим, у вас есть str='time=123123', если вы выполняете echo ${str#time=} вы получите 123123

+2

Поскольку ОП следующие лучшие практики, используя имена переменных строчными, вы можете сделать то же самое. –

+2

... re: «лучшие практики», см. Http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html, определяющие соглашения об именах переменных среды; поскольку переменные оболочки совместно используют пространство имен (то есть, например, установка переменной оболочки с именем PATH переопределяет содержимое переменной среды PATH), эти соглашения применяются также к переменным оболочки. –

+0

Спасибо, обновленный по вашему совету, но причина, по которой я использовал прописную букву, так это не путайте с временем = part :) – Fma

Смежные вопросы