Qual é a diferença entre '* .txt' e * .txt?

0

Eu estava completando o tutorial do git encontrado aqui: link

E ele disse que eu tinha que colocar aspas simples em torno de * .txt. Eu não tinha visto isso antes ao usar o Linux, mas achei que era peculiar. Eu também vi aspas simples ao usar html e php como uma forma de garantir que a string seja interpretada literalmente em vez de usar caracteres especiais.

    
por Fortune 28.08.2017 / 08:13

2 respostas

7

Este é o mesmo no shell como nas outras gramáticas que você mencionou. Uma única string entre aspas será tratada como "string literal" (por assim dizer).

A diferença entre git add '*.txt' e git add *.txt é quem está fazendo a correspondência do padrão com nomes de arquivos.

No caso de git add '*.txt' , git está fazendo a correspondência de padrões. Como o shell não expandirá a string literal '*.txt' , git add será chamado com um único argumento, *.txt . git , em seguida, faz a correspondência com os nomes de arquivos disponíveis em todo o repositório (porque ... git ).

No caso de git add *.txt , o shell faz a correspondência do nome do arquivo e passará uma lista de nomes de arquivos correspondentes do diretório atual para git add . Note que se não houver nomes que correspondam ao padrão dado, o shell irá (geralmente 1 ) passar o padrão para git add unexpanded. Se isso acontecer, o resultado será o mesmo que se o padrão tivesse sido citado.

1 Geralmente, mas veja, e. a opção failglob shell em bash . Veja também os comentários a esta resposta.

Quando git add obtiver um nome de arquivo padrão , ele adicionará não apenas os arquivos correspondentes no diretório atual, mas adicionará todos os arquivos correspondentes em todo o repositório (isto é, incluindo quaisquer subdiretórios). É por isso que o texto no canto inferior direito diz

Wildcards:

We need quotes so that Git will receive the wildcard before our shell can interfere with it. Without quotes our shell will only execute the wildcard search within the current directory. Git will receive the list of files the shell found instead of the wildcard and it will not be able to add the files inside of the octofamily directory.

    
por 28.08.2017 / 08:48
1

Aspas simples que impedem a glob e a expansão de variáveis pelo shell, mas aspas duplas impedem apenas a globalização da expansão não variável.

*.txt será expandido por shell e resultará na listagem de todos os arquivos .txt . mas citar '*.txt' irá impedi-lo. veja abaixo exemplos.

echo *.txt
a.txt b.txt c.txt

echo '*.txt'
*.txt
    
por 28.08.2017 / 08:53