Сценарии оболочки: обработка аргументов валюты
Я хочу запустить скрипт, который принимает аргументы в формате валюты. Пример:
> ./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