Confuso sobre quando escapar de metacaracteres em nomes de caminho

2

Estou bastante confuso sobre em que circunstâncias eu preciso escapar metacaracteres em nomes de caminho. Considere o seguinte exemplo:

Estou no seguinte diretório de trabalho:

$ echo $PWD
/home/helpermethod/foo[b]ar/foo/bar

Agora quero retirar tudo por trás de foo[b]ar . Estou usando a substituição de parâmetro para executar esta tarefa: / home / helpermethod / foo [b] ar

$ path=$PWD
$ basename=foo[b]ar
$ stripped_path=${path%$basename/*}/$basename

Isso parece não funcionar porque a string de nome da base precisa ser escapada adequadamente:

$ basename=foo\[b\]ar
$ stripped_path=${path%$basename/*}/$basename

Ok, agora eu tenho o stripped_path que eu estava procurando

$ echo "$stripped_path"
/home/helpermethod/foo[b]ar

Mas se eu testar agora se esse for um diretório válido

$ [[ -d $stripped_path ]]

o comando test sempre retorna falso (ou seja, um valor de retorno! = 0). Qual é o problema aqui? Preciso anuviar o stripped_path ?

    
por helpermethod 25.02.2013 / 19:19

1 resposta

3
stripped_path=${path%"$basename"/*}/$basename

Use aspas duplas para fazer correspondência de cadeia literal em oposição à correspondência de padrão. Um dos casos em que você precisa citar variáveis. Outro caso está na sua:

echo $PWD

acima do que deveria ter sido:

echo "$PWD"

Ou melhor ainda:

printf '%s\n' "$PWD"

Ou

pwd
    
por 25.02.2013 / 19:31