Você está removendo um nome de diretório (fixo) da string aqui.
No shell padrão, você pode fazer isso com a expansão ${parameter#pattern}
, e remove pattern
desde o início da string em parameter
, então ${file#source/}
removeria o prefixo source/
.
Além disso, em ksh / Bash / zsh ${parameter/pattern}
, a correspondência é removida em qualquer lugar da string, o que corresponde a s/pattern//
do sed mais de perto. ( ${..//..}
para remover todas as correspondências). Esses padrões são os mesmos usados para curingas de nome de arquivo ; eles não são regexes.
Em fish
, há o comando builtin string replace
, que parece que pode ser usado aqui:
> set f source/foobar
> string replace source/ "" -- $f
foobar
ou com -r
para regex, por isso não precisamos saber o caminho:
> string replace -r "^.*/" "" -- $f
foobar
(Note que eu não sou tão familiarizado com peixes. O acima pareceu funcionar, mas eu não tenho certeza se ele quebra em alguns casos de canto.)