Usando backticks ou dólar em shell scripts

9

Estou ocupado escrevendo script de shell (usando Bash) onde preciso preencher algumas variáveis do resultado retornado de outro comando.

Estou usando uma sintaxe como esta:

VAR='command 2>/dev/null'

Mas ao procurar por informações sobre scripts de script, muitas vezes descobri que o acima pode ser obtido usando a seguinte sintaxe também:

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

Ambos estão trabalhando para mim (eu recebi o resultado esperado em ambos os casos) e estou me perguntando se eu ainda posso usar os dois formatos de forma intercambiável ou se eu tenho que manter um formulário para ter certeza de estar em conformidade com o formulário evolução futura da casca?

    
por Justin 24.06.2014 / 13:35

2 respostas

13

Use dólar. Backticks são semi-depreciados , porque são mais complicados de usar (veja o link), e não há vantagens para eles a menos que você esteja fazendo um código de golfe e absolutamente precise salvar um único caractere. Eles provavelmente não serão removidos de shells populares tão cedo, então você está seguro usando por enquanto.

    
por l0b0 24.06.2014 / 13:38
3

Fique com a notação de cifrão $() sempre que puder. Os backticks ficam complicados / confusos quando você começa a precisar 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 citações de ângulos de varrimento para discernir):

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

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

    
por Aaron 24.06.2014 / 15:20