Ícone do site SOLOWEB Tecnologia

Diferença entre ${} e $() no Bash

Os sistemas operacionais baseados em GNU, como o Linux, dependem de um interpretador de linguagem de comando ou shell chamado Bash para realizar a maioria de suas tarefas e objetivos de computação.

O autor por trás do Bash ( Stephen Bourne ) também é referenciado principalmente em sua sigla ( Bourne-Again SHell ). Em termos de compatibilidade, Bash e sh são uma combinação perfeita. Recursos úteis evidentes no shell C ( csh ) e no shell Korn ( ksh ) também são incorporados a esse interpretador de linguagem shell.

Em termos de implementação, o Bash destina-se a estar em conformidade com a especificação IEEE POSIX (Padrão IEEE 1003.1) Parte de ferramentas e IEEE POSIX Shell. Portanto, como uma ferramenta interativa e de programação, as melhorias funcionais oferecidas pelo Bash superam as presentes no sh .

Os usuários do Linux e de outros sistemas operacionais baseados em GNU não são forçados a confiar apenas no Bash como seu principal interpretador de linguagem de comando, pois versões do shell como o csh também são pré-empacotadas nesses sistemas. O Bash é configurado apenas para funcionar como um shell padrão do Linux devido a seus atributos de shell exclusivos, como portabilidade.

Comparando $() com ${} no Bash

Para comparar esses dois atributos associados ao ambiente Bash , teremos que reiterar $() ou $(command)${} ou  ${parameter}. Podemos, portanto, tentar definir essas duas entidades Bash.

Entendendo $(comando)

$(command)no Bash refere-se à substituição de comandos. Para ser mais específico, a parte do comando em $(command) é executada, sua saída é capturada e impressa na saída padrão.

A sintaxe por trás $(command) é em nível de token. Considere a execução do seguinte comando que pretende imprimir a data atual no terminal.

$ echo "Hoje é $(date). Um belo dia."

A execução acima pode ser explicada da seguinte maneira. Primeiramente, o comando date é executado e sua saída é incluída como um argumento para o comando echo.

Aqui, podemos presumir que a substituição do comando é executada em um sub-shell separado antes de sua reinclusão no shell principal.

Compreendendo ${parâmetro}

${parameter} no Bash refere-se à substituição de parâmetros. De acordo com a página de manual do Bash, um parâmetro é uma entidade de armazenamento de valor. A entidade de parâmetro pode ser associada a um nome, número ou caracteres especiais.

As chaves {} implicam que estamos lidando com um parâmetro posicional ou que o parâmetro em uso (valor do parâmetro) é sucedido por um caractere não interpretativo que não deve ser associado ao nome do parâmetro, por exemplo ${animal}s.

Quanto aos parâmetros posicionais, um ou mais dígitos podem ser usados ​​para denotá-lo (com exceção do único dígito 0). Portanto, se tivermos uma variável chamada $variable_name, a substituição do parâmetro ${parameter} pode ser usada para recuperar o valor da variável associada.

Considere o seguinte comando de declaração de variável:

$ animal=lion

Vamos chamar a variável animal na tentativa de pluralizar o valor da variável:

$ echo $animals

Nada é impresso na saída padrão porque o Bash não entende a variável $animals. No entanto, podemos chamar nossa $animals variável com sucesso usando a abordagem de substituição de parâmetro da seguinte maneira:

echo ${animal}s

Em alguns cenários, um ponto de exclamação pode suceder a primeira chave esquerda da implementação de substituição de parâmetro. Nesse caso, o conceito de indireção variável ocorre.

O valor da variável tem precedência sobre o valor do parâmetro conforme demonstrado abaixo:

$ animal=lion 
$ echo $animal
$ lion=dog
$ echo $lion
$ echo ${!animal}

Agora faça variações destes exemplos, pratique e aprenda um pouco mais de como Bash pode nos ajudar no dia a dia.

Sair da versão mobile