В сценарии оболочки удара, как я преобразовываю строку в число [дубликат]

Я выполняю XCode для разработки Mac на 20-дюймовой iMac текущего генерала, и это работает отлично с большим количеством другого выполнения процессов. Можно определенно использовать iMac для разработки программного обеспечения.

12
задан PJT 23 November 2009 в 23:49
поделиться

6 ответов

По какой-то причине мне нравится это решение:

if ! echo "$x $y -p" | dc | grep > /dev/null ^-; then
  echo "$x > $y"
else
  echo "$x < $y"
fi

Вам нужно убедиться, что $ x и $ y действительны (например, содержат только числа и ноль или один '.') и, в зависимости от возраста вашего постоянного тока вам может потребоваться укажите что-то вроде "10k", чтобы получить распознавать нецелые значения.

3
ответ дан 2 December 2019 в 07:21
поделиться

Вот некоторые проблемы, с которыми я столкнулся:

  1. Большинство людей считают функциональное программирование трудным для понимания. Это означает, что вам, вероятно, будет труднее написать функциональный код, и почти наверняка будет труднее его усвоить.
  2. Функциональные языки программирования обычно медленнее, чем такие языки, как c. Со временем это становится менее серьезной проблемой (потому что компьютеры становятся быстрее, а компиляторы - умнее)
  3. Не так широко, как их обязательные аналоги, может быть трудно найти библиотеки и примеры для общих проблем программирования. (Например, почти всегда легче найти что-то для Python, чем для Haskell)
  4. Не хватает инструментов, особенно для отладки. Это определенно не так просто, как открыть Visual Studio для C #,
14
ответ дан 2 December 2019 в 07:21
поделиться

Bash не понимает числа с плавающей запятой. Он понимает только целые числа.

Вы можете либо перейти на более мощный язык сценариев (Perl, Python, Ruby ...), либо выполнить всю математику через bc или аналогичный.

2
ответ дан 2 December 2019 в 07:21
поделиться

используйте awk

x="0.80"
y="0.70"
result=$(awk -vx=$x -vy=$y 'BEGIN{ print x>=y?1:0}')
if [ "$result" -eq 1 ];then
    echo "x more than y"
fi
1
ответ дан 2 December 2019 в 07:21
поделиться

Если ваши значения гарантированно находятся в той же форме и диапазоне, вы можете выполнить сравнение строк:

if [[ $x > 0.70 ]]
then
    echo "It's true"
fi

Это не удастся, если x равно ".8" ​​( без ведущего нуля), например.

Однако, хотя Bash не понимает десятичные дроби, его встроенная функция printf может их форматировать. Так что вы можете использовать это для нормализации ваших значений.

$ x=.8
$ x=$(printf %.2 $x)
$ echo $x
0.80
1
ответ дан 2 December 2019 в 07:21
поделиться

Язык bash лучше всего охарактеризовать как полнофункциональный макропроцессор, в котором нет разницы между числами и строками. Проблема в том, что test (1) работает с целыми числами.

0
ответ дан 2 December 2019 в 07:21
поделиться