Сценарії оболонки: обробка валютних аргументів


0

Я хочу запустити сценарій, який приймає аргументи у форматі валюти. Приклад:

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

але як ви робите цей вхід читати з stdin або аргументи командного рядка?

Відповіді:


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.