Удаление строки с помощью другой строковой оболочки

#bash #shell

#bash #оболочка

Вопрос:

Я запускаю сценарий оболочки, и у меня есть следующая строка:

keystore_location="/mnt/blumeta0/db2/keystore/keystore.p12" Как мне получить строку раньше keystore : /mnt/blumeta0/db2 т.е. Я знаю, как удалить разделитель из одного символа и путь, прежде чем хранилище ключей может измениться. Я пытался:

 arrIN=(${keystore_location//"keystore"/ })
 

Ответ №1:

Вы хотите

 arrIN=${keystore_location%%keystore*}
echo $arrIn
/mnt/blumeta0/db2/
 

%% Оператор удаляет самое длинное совпадение, считывая с правой стороны строки

Обратите внимание, что существуют также операторы

 %   --- remove first match from the right side of the string
#   --- remove first match starting from the left side of the string
##  --- remove longest match starting for the left side of the string.
 

IHTH

Комментарии:

1. @oguzismail ; Doah. смотрите правки (надеюсь, это поможет!) . Всем удачи.

Ответ №2:

 $ keystore_location="/mnt/blumeta0/db2/keystore/keystore.p12"
$ echo "${keystore_location%%/keystore*}"
/mnt/blumeta0/db2
 

%%/keystore* удаляет самое длинное совпадение суффиксов, /keystore* которое является шаблоном $keystore_location глобуса.