Embora eu tenha lido a maior parte das perguntas sobre como lidar com espaços em nomes de caminhos, ainda não encontrei meu caso, que é sobre vários nomes de caminho em uma variável.
find
precisará disso quando dois caminhos base forem fornecidos, por exemplo:
pa="/home/user/folder1 /home/user/folder2"
find $pa -name '*xy*' ...
Isso procurará correspondências em ambos folder1
e folder2
.
(Observe que este é um exemplo simplificado ; sei muito bem que neste caso especial, você poderia usar o modificador -path
com um parâmetro como folder*
que abrange Ambas as pastas. No entanto, esta questão é para cobrir casos em que você não pode contornar o problema tão facilmente devido à maior complexidade.)
Agora imagine folder2
contém um espaço no meio. Os seguintes itens não funcionarão:
pa="/home/user/folder1 /home/user/fol\ der2"
find $pa -name '*xy*' ...
O problema é o \
, que normalmente é usado para representar um espaço no shell, mas não funciona quando o conteúdo da variável é colocado entre aspas duplas.
No entanto, diferentemente do caminho um por variável (onde pode ser útil), o seguinte não funcionará:
pa=/home/user/folder1 /home/user/fol\ der2
find $pa -name '*xy*' ...
$ ./test.sh: line 3: /home/user/fol der2: Is a directory
nem a seguinte variante:
pa=/home/user/folder1 /home/user/fol\ der2
find "$pa" -name '*xy*' ...
Então, como os espaços podem ser manipulados adequadamente em caminhos se vários caminhos estiverem contidos em uma variável?
Pergunta relacionada: Existe alguma maneira confiável de determinar se um espaço em branco é um separador entre um caminho e seu sucessor (dentro da mesma variável) ou um espaço em branco que pertence a um dos caminhos contidos nele?