Correspondência de Padrões - Linux
Os operadores de correspondência de padrões (pattern matching) permitem encontrar um padrão em uma variável e, se encontrado, modificar essa variável. Os operadores são os seguintes:
O operador
é usado para encontrar a correspondência mais longa com o padrão desde o início da string.##
O operador
é usado para encontrar a correspondência mais curta com o padrão desde o início da string.#
O operador
é usado para encontrar a correspondência mais longa com o padrão desde o final da string.%%
O operador
é usado para encontrar a correspondência mais curta com o padrão desde o final da string.%
Vamos definir no diretório pessoal o seguinte script hello
#!/bin/bash
# script que obtém o nome do arquivo
filename=${1##*/}
echo "The filename is $filename"
exit 0
Neste caso, a busca pelo padrão é aplicada ao identificador $1
##
*/
/
*
##
/
Execute o script e passe o caminho completo de um arquivo:
programicio@Programicio:~$ bash hello /home/programicio/Documents/hello.txt The filename is hello.txt
Usando o operador #
#!/bin/bash
# script que obtém o nome do arquivo
path=${1#*/}
echo "path: $path"
exit 0
Execute o script, passando o caminho do arquivo:
programicio@Programicio:~$ bash hello /home/programicio/Documents/hello.txt path: home/programicio/Documents/hello.txt
Neste caso, o operador busca o primeiro caractere /
*
${1#*/}
/
${1#/}
/
$1
$1
/
/
Outro exemplo, obteremos o caminho relativo do arquivo:
#!/bin/bash
# script que obtém o caminho relativo do arquivo
rel_path=${1#$PWD/}
echo "Relative path: $rel_path"
exit 0
Aqui, o padrão de busca é estabelecido com base na variável $PWD
/
programicio{Programicio:~$ echo $PWD /home/programicio programicio{Programicio:~$ bash hello /home/programicio/Documents/hello.txt Relative path: Documents/hello.txt
Os operadores %%
%
#!/bin/bash
# script que obtém o diretório do arquivo
dirname=${1%/*}
echo "Directory: $dirname"
exit 0
Neste caso, o operador ${1%/*}
/
programicio@Programicio:~$ bash hello /home/programicio/Documents/hello.txt Directory: /home/programicio/Documents