Como devo entender “.” na expansão de nomes de arquivos?

0

No Manual do Bash, para expansão de nome de arquivo:

When a pattern is used for filename expansion, the character . at the start of a filename or immediately following a slash must be matched explicitly, unless the shell option dotglob is set.

When matching a filename, the slash character must always be matched explicitly.

In other cases, the . character is not treated specially.

Você pode dar alguns exemplos para explicar os casos na citação?

Como devo distinguir o uso de . na expansão de nome de arquivo de seu uso não relacionado de hardlink . ?

    
por Tim 28.12.2015 / 21:50

1 resposta

5

Não há uso de . na expansão de nome de arquivo. Se você usar a expansão de nome de arquivo, os nomes de arquivos que começam com . geralmente são excluídos, a menos que você tenha solicitado explicitamente por eles, usando algo como .* ou .? . / não é um caractere válido em um nome de arquivo, portanto, * não corresponde a / .

$ touch foo .foo; echo *; echo .*; echo ./*; echo; ./.*
foo
.foo
./foo
./.foo

Observe como * e ./* excluíram .foo - mas o primeiro comando echo não usou . e o terceiro echo usou ./ , então o curinga é separado de o . por um / . Para corresponder nomes de arquivos que começam com . , você deve especificar explicitamente os . - .* , ./.* . No entanto, neste caso, o papel de . não é diferente, digamos, do papel de a in a* .

Esta exceção pode ser desativada usando shopt -s dotglob .

Como não há uso especial de . na expansão de nome de arquivo, não há nada para distinguir. Os únicos caracteres especiais na expansão de nome de arquivo são * , ? , [...] .

    
por 28.12.2015 / 23:06

Tags