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

> ./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

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

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

2 ответа2

2

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

./myscript \$55.50
1

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

./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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .