O Ubuntu não calcula a expressão em [..]?

3

Sou novato no Linux. Eu estou lendo o livro Linux: Rute Users. Tudo está bem até eu chegar à Unidade 7.1.

Meu script é o seguinte:

#!/bin/sh
echo "enter X"
read X
echo "enter Y"
read Y
echo "X*Y = $X*$Y = $[X*Y] = $[$X*$Y]"

Meu terminal não me dá X * Y = 2 * 3 = 6, em vez disso, imprime

X*Y = 2*3 = $[X*Y] = $[2*3]

Eu também tentei o comando diretamente no terminal:

echo "$[2*3]"

e isso me dá 6 corretamente.

Qual é o problema com o meu script? Estou usando o Ubuntu Desktop 12.04 LTS 32bit. Obrigado!

    
por jswxy1 20.02.2014 / 06:16

1 resposta

6
  

A expressão condicional ((...)) avalia uma expressão aritmética   como se estivesse escrito em uma linguagem algorítmica "normal" (você pode até   omitir sinais de dólar das variáveis) e define o status de saída para 1 se   a expressão é avaliada como 0 ou 0 se a expressão for avaliada como   um valor diferente de zero.

     

No bash versão 3.2 e posterior você pode (e deve) usar $ (())

Cite este

O que é o bash?

  

Descendente da Bourne Shell, Bash é um produto GNU, o "Bourne   Novamente SHELL. "É a interface de linha de comando padrão na maioria dos Linux   máquinas. Ele se destaca na interatividade, suportando edição de linha de comando,   conclusão e recall. Também suporta prompts configuráveis - a maioria   as pessoas percebem isso, mas não sabem o quanto pode ser feito.

Você deve usar (( )) para expressões matemáticas:

echo "$(( 2*3 ))"

ou

echo "$(( $X*$Y ))"

ou até mesmo

echo "$(( X*Y ))"

Por que echo $[..] também funciona em algum ambiente?

  

Expansão aritmética

     

A expansão aritmética permite a avaliação de uma aritmética   expressão e substituição do resultado. O formato para   expansão aritmética é:

     

$ ((expression))

     

O formato antigo $ [expression] está obsoleto e será removido   nas próximas versões do bash.

    
por c0rp 20.02.2014 / 13:54

Tags