Bash - Define uma variável [duplicata]

0

Eu preciso definir uma variável no meu script bash

#!/usr/bin/env bash

GITNAME= git config --global user.name
echo " $GITNAME "

Mas parece que não funciona assim.

Como funciona?

    
por Kevin 02.08.2016 / 16:38

3 respostas

6

Supondo que você esteja tentando executar o comando git e armazenar seu resultado em uma variável, você vai querer a sintaxe $(...) , onde você coloca seu comando dentro dos parênteses:

GITNAME="$(git config --global user.name)"
printf '%s\n' "$GITNAME"

observe também que não há espaço após o = na atribuição. Como o sjsam apontou, é melhor citar também os parênteses. Isso ocorre porque, após a substituição de palavras, a expansão de glob e outras etapas de análise ainda acontecem, portanto, se o seu nome continha, digamos, * , o glob seria expandido, e provavelmente não é o que você pretende.

Como nota de estilo, você geralmente não deve usar todas as letras maiúsculas para os nomes das variáveis, pois isso pode fazer com que elas colidam com variáveis de ambiente.

    
por 02.08.2016 / 16:44
6

Algumas sugestões

O que há de errado com abaixo

GITNAME= git config --global user.name
  • Não use variáveis full-uppercase para seu script, pois elas podem entrar em conflito com uma variável de sistema com nome semelhante
  • Não deve haver espaços em torno de = no formulário variable=value
  • No seu caso, o lado direito é uma expressão, então você precisa envolvê-lo em backticks ( '' ), que diz ao shell que ele inclui um comando e deve ser substituído pelo resultado. / li>
  • Agora, os backticks são herdados, você pode usar [mais capaz] $() em vez deles.
  • Por fim, aspas duplas na substituição do comando para evitar [divisão de palavras] .

Declaração corrigida

gitname="$(git config --global user.name)" # Error proof
    
por 02.08.2016 / 16:52
3

Para salvar a saída de um comando como variável em bash , use a substituição de comando $() :

GITNAME="$(git config --global user.name)"

Observe que, em bash , não deve haver espaço em branco em torno de = na declaração de variável.

Além disso, tenha cuidado com a nomenclatura de variáveis maiúsculas, pois ela pode substituir qualquer variável de ambiente (que geralmente é maiúscula) pelo mesmo nome. A menos que seja absolutamente necessário, use caracteres minúsculos para variáveis definidas pelo usuário.

Por outro lado, se você precisar salvar a string como uma variável:

GITNAME="git config --global user.name"
    
por 02.08.2016 / 16:44