Script de shell: manipulando argumentos de moeda

0

Eu quero executar um script que aceita argumentos em um formato de moeda. Exemplo:

> ./myscript $55.50
total is $55.50
> ./myscript $3.40
total is $58.90

Agora, não importa o quanto eu tente escapar do cifrão no argumento, fico:

> ./myscript $55.50
total is $5.50
> ./myscript $3.40
total is $5.90

Então, como você lida com valores monetários em scripts de shell? Obviamente, se eu especificar os valores no script, posso escapar deles corretamente: variável = '$ 65' OU variável="\ $ 65 '

mas como você faz essa entrada com base nos argumentos stdin ou de linha de comando?

    
por Paul 06.08.2010 / 12:49

2 respostas

2

Apenas escape do sinal de dólar na linha de comando. Bash interpreta isto antes de passar isto como argumento para o script. É por isso que 5.50 é passado para o script (variável $ 5 não tem valor)

./myscript \.50
    
por 06.08.2010 / 13:03
1

Outra maneira de escapar do argumento é colocá-lo entre aspas simples da mesma maneira que você faria no script:

./myscript '$55.50'

A expansão da variável é executada pelo shell antes que os argumentos sejam passados para o executável. Cifrões introduzem expansão de parâmetros (e substituição de comandos e expansão aritmética. Neste caso, já que há um dígito seguindo o cifrão, ele está sendo tratado como um parâmetro posicional, então ele está procurando pelo quinto argumento. Já que você está em um prompt de comando shell interativo, não é provável que tenha algum valor (você pode fazer set -- para afetar isso, no entanto).

$ echo $55.50
5.50
$ echo \.50
$55.50
$ echo '$55.50'
$55.50
$ set -- aaa bbb ccc ddd eee fff
$ echo $55.50
eee5.50
    
por 06.08.2010 / 17:30