Назад | Перейти на главную страницу

Выражение сценария для получения части строки?

Я использую оболочку bash в CentOS, версия ...

$ uname -a
Linux mydomain.com 3.2.29-48.63.amzn1.x86_64 #1 SMP Sat Sep 15 01:43:12 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

В моем сценарии оболочки я хочу получить часть строки, а именно все, что до последнего тире («-»). Итак, если моя строка - «my-importer-1.0.ear», я хочу извлечь «my-importer». Однако выражение ниже

prefix=${fname%-*}

возвращает только "my", потому что соответствует первому тире. Как мне настроить выражение, чтобы оно соответствовало всему до последнего тире?

Вы уверены, что не используете %% который удаляет самое длинное совпадение с конца строки и, таким образом, дает вам my тогда как % удаляет самое короткое совпадение и предоставляет (например, вам) то, что вы хотите

fname=my-importer-1.0.ear
echo ${fname%%-*}
my

в то время как

echo ${fname%-*}
my-importer