Использование операторов удаления шаблона оболочки POSIX:
string=svn+ssh://srv.com/repo/branches/TEST_BRANCH_56/main/code/main_output.c
output=${string#*/branches/*/}
Это удалит наименьшую начальную часть $ string
, которая соответствует этому шаблону. Он отличается от:
printf '%s\n' "$string" | sed '
:1
$!{
N;b1
}
s|.*/branches/[^/]*/||'
или:
expr " $string" : ' .*/branches/[^/]*/\(.*\)'
в таких случаях, как string = foo / branch / bar / branch / baz / something
, где $ {string # pattern}
можно было бы вернуть ветвей / baz / something
, в то время как другие вернут только безотносительно
.
Логика аналогична логике дома. :Владелец или арендатор решает, каких гостей выгнать, независимо от того, кому они принадлежат. Кроме того, выселенный гость, которому рады в другом доме (, имеет еще одну жесткую ссылку в чужом каталоге ), не замерзнет снаружи.