Сценарии оболочки: обработка аргументов валюты

Я хочу запустить скрипт, который принимает аргументы в формате валюты. Пример:

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

Теперь, как бы я ни старался избежать знака доллара в аргументе, я получаю:

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

Так как же вы обрабатываете денежные суммы в скриптах оболочки? Очевидно, что если я укажу суммы в скрипте, я смогу правильно их избежать: variable='$65' OR variable="\$65'

но как вы делаете эти входные данные из аргументов стандартного ввода или командной строки?

2 ответа

Просто избегайте знака доллара в командной строке. Bash интерпретирует его перед передачей в качестве аргумента скрипту. Поэтому в скрипт передается 5.50 (переменная $5 не имеет значения)

./myscript \$55.50

Другой способ избежать аргумента - заключить его в одинарные кавычки так же, как в сценарии:

./myscript '$55.50'

Расширение переменной выполняется оболочкой перед передачей аргументов в исполняемый файл. Знаки доллара вводят расширение параметров (а также подстановку команд и арифметическое расширение. В этом случае, поскольку после знака доллара стоит цифра, он обрабатывается как позиционный параметр, поэтому он ищет пятый аргумент. Поскольку вы находитесь в командной строке в интерактивная оболочка, маловероятно, что имеет какое-либо значение (вы можете сделать set -- повлиять на это, хотя).

$ echo $55.50
5.50
$ echo \$55.50
$55.50
$ echo '$55.50'
$55.50
$ set -- aaa bbb ccc ddd eee fff
$ echo $55.50
eee5.50
Другие вопросы по тегам