Substituição de comandos e espaços

0

Por que isso funciona como uma calculadora:

[root@qabun02 ~]# echo $(( 5+2  ))
7

mas isso não acontece?

[root@qabun02 ~]# echo $( (5+2) )
-bash: 5+2: command not found

A única diferença que posso ver é a ausência de espaço entre os colchetes?

Além disso:

[root@qabun02 ~]# echo $(who) root pts/0 2015-01-28 09:53 (10.40.0.115) [root@qabun02 ~]# echo $((who)) 0

Como a substituição de comandos responde a (( e ( ( ?

    
por Sree 28.01.2015 / 11:17

2 respostas

3

O problema é que $( inicia a substituição de comando, enquanto $(( inicia a expansão aritmética.

$( (5+2) ) é o comando (5+2) , ou seja, o comando 5+2 em um subshell. Mas isso não é um comando válido.

$((who)) é substituído pelo valor da variável who , o que é provavelmente indefinido, ou seja, 0.

    
por 28.01.2015 / 11:22
1

No bash:

$(...) significa substituição de subcomando (semelhante a '...');

$((...)) significa substituição de avaliação aritmética;

${...} significa substituição de variável / parâmetro;

O $(( deve ser visto como uma sequência atômica de caracteres (necessariamente terminada por )) ), não é equivalente a $ (( , $( ( ou $ ( ( .

OBS: sem o $ imediatamente anterior, um ( é apenas um ( e pode ser usado dentro de um bloco $((...)) para determinar a precedência da avaliação aritmética (como $(( (3+4)*5 )) difere de $(( 3+4*5 )) .

    
por 28.01.2015 / 11:34