“comando não encontrado” ao usar expansão aritmética no shell bash

6

Usando o Ubuntu Desktop, tenho terminal aberto e estou usando o shell bash. Uma das expansões de shell do bash é a expansão aritmética, com a seguinte sintaxe:

$(( EXPRESSION ))
or 
$[ EXPRESSION ]

Quando faço aritmética, ele retorna o valor correto, mas sempre é seguido por "comando não encontrado":

$ $((1+2))
3: command not found
$ $[1+2]
3: command not found
$ $[2+2]
4: command not found
$ $((2*6))
12: command not found

Minha pergunta é por que ele exibe "comando não encontrado" e como posso corrigir isso?

    
por JohnMerlino 15.03.2014 / 06:44

3 respostas

4

Você precisa adicionar o comando echo antes de todos os seus comandos,

$ echo $[1+2]
3

Você não precisa colocar diretamente $[1+2] no terminal, porque o bash calcula $[1+2] e novamente analisa o mesmo, então ocorre um erro de comando não encontrado.

Por exemplo

$ var="sudo apt-get update"
$ $var

Ign http://archive.canonical.com saucy InRelease                               
Ign http://ppa.launchpad.net saucy InRelease                                   
Ign http://ubuntu.inode.at saucy InRelease                          
Ign http://extras.ubuntu.com saucy InRelease                        
29% [Waiting for headers] [Waiting for headers] [Waiting for headers]

No exemplo acima, o comando sudo apt-get update foi atribuído a uma variável var .Na execução $var , primeiro o bash expande e analisa novamente o expandido.

    
por Avinash Raj 15.03.2014 / 06:49
4
$ $((1+2))
3: command not found

O que está acontecendo aqui é que bash calcula $((1+2)) , o que resulta em 3 . bash procura um comando chamado 3 para executar. Não o encontra. Daí o erro. Como o @Avinash sugere, use echo para evitar isso.

$ echo  $((1+2))
3
    
por John1024 15.03.2014 / 06:51
3

Porque bash está tentando executar a saída de sua expansão e não encontra command com o nome 3 no PATH . Para testar, use echo ou atribua-o a uma variável e use-a depois.

echo $((1+2))
3
test=$((1+2))
echo $test
3
    
por clement 15.03.2014 / 06:51