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)
e ${}
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.
E lembrando que a SOLOWEB além de oferecer Hospedagem de Sites, Servidores Dedicados, Servidores VPS com o menor custo do Brasil, também desenvolve soluções de software e realiza gerenciamento e monitoramento de servidores para sua empresa, faça uma cotação sem custo, acesse: www.soloweb.com.br