Витяг joebloggsз цього рядка в bash, використовуючи розширення параметра без зайвих процесів ...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
Це не залежить від joebloggsтого, що ви знаходитесь на певній глибині шляху.
Підсумок
Огляд кількох режимів розширення параметрів, для довідки ...
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
Так #означає збіг від початку (придумайте рядок коментарів) і %означає від кінця. Один екземпляр означає найкоротший, а два екземпляри - найдовший.
Ви можете отримати підрядки на основі позиції, використовуючи числа:
${MYVAR:3} # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)
Ви також можете замінити окремі рядки або візерунки, використовуючи:
${MYVAR/search/replace}
Він patternзнаходиться в тому ж форматі, що і відповідність імен файлів, тому *(будь-які символи) є загальним, часто супроводжується певним символом, як /або.
Приклади:
Дано змінну на кшталт
MYVAR="users/joebloggs/domain.com"
Видаліть назву файлу, який залишає шлях (усі символи до косої риски):
echo ${MYVAR##*/}
domain.com
Видаліть ім’я файлу, залишивши шлях (видаліть найкоротший збіг після останнього /):
echo ${MYVAR%/*}
users/joebloggs
Отримайте просто розширення файлу (видаліть усі до останнього періоду):
echo ${MYVAR##*.}
com
ПРИМІТКА. Щоб виконати дві операції, їх ви не можете комбінувати, але потрібно призначити проміжну змінну. Отже, щоб отримати ім'я файлу без шляху чи розширення:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain