Quando se deve usar $ () na definição de variáveis

5

Alguns scripts de shell que eu encontrei usam a seguinte sintaxe ao definir variáveis:

file_list_1=$(echo "list.txt")

ou

file_list_2=$(find ./)

Eu teria usado:

file_list_1="list.txt"

e

file_list_2='find ./'

Sou iniciante e não tenho certeza se algum dos itens acima é melhor ou mais seguro. Qual é o benefício de usar a sintaxe x=$( ) ao definir uma variável?

    
por Chris R 22.05.2015 / 00:55

2 respostas

9

Do manual ( man bash ):

$(command)  or  'command'

Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. The command substitution $(cat file) can be replaced by the equivalent but faster $(< file).

When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by $, ', or \. The first backquote not preceded by a backslash terminates the command substitution. When using the $(command) form, all characters between the parentheses make up the command; none are treated specially.

O padrão POSIX define a forma $() de substituição de comando. %código% permite comandos aninhados e parece melhor (legibilidade). Ele deve estar disponível em todos os shells Bourne .

Você pode ler mais sobre o IEEE Std 1003.1, Linguagem de Comando Shell, Seção 2.6.3 Substituição de Comandos .

Pelo menos um Unix, AIX, documentou que os backticks são obsoletos . A partir desse link:

Although the backquote syntax is accepted by ksh, it is considered obsolete by the X/Open Portability Guide Issue 4 and POSIX standards. These standards recommend that portable applications use the $(command) syntax.

No entanto, $() não precisa ser compatível com POSIX. Portanto, às vezes ainda há casos de backticks no mundo real, como aponta o @Jeight.

    
por 22.05.2015 / 01:39
1

É muita preferência pessoal. Usando um backtick para significar um comando seria mais POSIX compatível com sistemas mais antigos. O $ () é mais moderno e é mais fácil de ler para algumas pessoas. Eu pessoalmente nunca usaria file_list_1=$(echo "list.txt") . Parece feio e não tem uso adicional.

    
por 22.05.2015 / 01:02