Добавление 1 к переменной не работает должным образом (арифметика Bash)

Я установил gpodder 3.8.3 (используя этот ppa: https://launchpad.net/~thp/+archive/ubuntu/gpodder), но мне также нужно было установить python-gpod, чтобы заставить синхронизацию ipod работать , Невозможно заставить обложку альбома работать.

1
задан 12 September 2016 в 08:08

2 ответа

Вы можете попробовать эту команду, чтобы получить ответ:

A="0012"
echo $A + 1 | bc

Более подробную информацию о команде bc можно найти здесь.

bc man page:

NAME
       bc - An arbitrary precision calculator language

SYNTAX
       bc [ -hlwsqv ] [long-options] [  file ... ]

DESCRIPTION
       bc is a language that supports arbitrary precision numbers with interactive execution of statements.  There are some similarities
       in the syntax to the C programming language.  A standard math library is available by command line  option.   If  requested,  the
       math  library is defined before processing any files.  bc starts by processing code from all the files listed on the command line
       in the order listed.  After all files have been processed, bc reads from the standard input.  All code is executed as it is read.
       (If a file contains a command to halt the processor, bc will never read from the standard input.)

       This  version of bc contains several extensions beyond traditional bc implementations and the POSIX draft standard.  Command line
       options can cause these extensions to print a warning or to be rejected.  This document describes the language accepted  by  this
       processor.  Extensions will be identified as such.
5
ответ дан 23 May 2018 в 06:15
  • 1
    Вместо использования echo и канала, вы можете использовать Bash 'here string " синтаксис. Эффект один и тот же, но IMHO "здесь строка" более красиво: bc <<< "$A + 1" :-) – Byte Commander 11 September 2016 в 17:26
  • 2
    Было бы полезно ввести одно или два предложения команды bc в дополнение к ссылке here. – WinEunuuchs2Unix 11 September 2016 в 17:41

Альтернативный метод может состоять в том, чтобы сохранить ваши переменные целыми числами и преобразовать их в строку в конце:

A=12
B=$((A+1))
echo $B
13
C=$( printf '%04d' $B )
echo $C
0013

Этот стиль работы с целыми числами в математике и преобразование в строку для ответа более интуитивно понятный для меня, поскольку я привык к программированию BASIC. Я ценю, что у Bash нет переменных ввода, таких как C и BASIC, но притворяясь, что это делает меня счастливым.

2
ответ дан 23 May 2018 в 06:15
  • 1
    Это был тест, чтобы подчеркнуть проблему, с которой я столкнулся. Я читаю начальную переменную, беря вывод другой команды, которая является текстом и имеет ведущие нули. – Robert3452 11 September 2016 в 17:46
  • 2
    Ах ... история всегда объясняет, как мы дошли до настоящего. – WinEunuuchs2Unix 11 September 2016 в 17:50
  • 3
    @ Robert3452 Вы также можете удалить ведущие нули: A="0012"; A=$((10#$A)) – wjandrea 17 September 2016 в 06:31

Другие вопросы по тегам:

Похожие вопросы: