Usando backticks ou dollar em shell scripts


9

Estou ocupado escrevendo scripts shell (usando o Bash), onde preciso preencher alguma variável do resultado retornado de outro comando.

Então, eu estou usando uma sintaxe como esta:

VAR=`command 2>/dev/null`

Mas, ao procurar informações sobre shells de script, descobri frequentemente que o acima pode ser alcançado usando a seguinte sintaxe também:

VAR=$(command 2>/dev/null)

Ambos estão trabalhando para mim (recebi o resultado esperado em ambos os casos) e, portanto, estou me perguntando se ainda posso usar os dois formulários de forma intercambiável ou se tenho que me ater a um formulário para garantir a conformidade com a evolução futura do Concha ?



Os links da belacqua oferecem muitas informações sobre as diferenças e o uso. Fechando, pois não está relacionado a um problema do Ubuntu, mas a um problema de programação. Eu recomendo seguir os links mencionados acima.
Luis Alvarado

Respostas:


13

Use dólar. Os backticks são semi-obsoletos , porque são mais complicados de usar (consulte o link), e não há vantagens para eles, a menos que você esteja praticando golfe de código e absolutamente precise salvar um único caractere. Eles provavelmente não serão removidos das conchas populares tão cedo, então você estará seguro de usar por enquanto.


3

Fique com a notação de cifrão $()sempre que puder. Os backticks ficam complicados / confusos quando você começa a fazer citações aninhadas. Ex:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Substituir os backticks por $()produz a mesma saída e é mais fácil de ler (menos aspas de ângulos de variação para discernir):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

Isso e cada aspas (aspas simples, aspas duplas, backtick) significa algo diferente no shell, portanto, usar $ pode ajudar a remover um nível de complexidade. E o desenvolvedor que o segue agradece, pois ele / ela terá mais facilidade para descobrir o que você fez.


Os backticks nem sequer podem ser aninhados funcionalmente.
Bernhard

@ Bernhard Meu exemplo mostra o que eu tinha em mente com essa afirmação.
Aaron
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.