Поведение bash-оператора ++ утомлено константой - PullRequest
0 голосов
/ 14 октября 2018

Иногда я сталкиваюсь с проблемой при вычислении операции самоинкрементного ++ с константой, поведение которой меня утомляет.(Это не исходные коды, я просто скопировал похожие строки)

#!/bin/bash
echo "out1="$((++5))
echo "out2="$((5++))

Фрагмент кода выглядит примерно так;когда я его выполнил, я получил следующий результат:

$ bash test.sh
out1=5
test.sh: line 3: 5++: syntax error: operand expected (error token is "+")

Версия bash: GNU bash, версия 4.2.46 (2) -релиз (x86_64-redhat-linux-gnu)

Я хочу знать:

  1. почему нет синтаксической ошибки для оператора предварительного увеличения?
  2. почему операция постинкремента возвращает значение 5, отличное от 6.

Спасибо.

1 Ответ

0 голосов
/ 14 октября 2018

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

  • предварительное увеличение на самом деле не является прединкрементом, но вы можете поместить любое число символов + и - перед константой, чтобы определить, является ли она положительной или отрицательной.Я подозреваю, что парсер видит $(( +(+5) ))
    • сводку: вы просто указываете знак числа.
  • , поскольку постинкрементная константа не имеет смысла (вы можете't присваивает константу 5 со значением 6), она воспринимается так, как если бы вы печатали "5 плюс ... что-то", и вместо арифметического значения вы дали еще один знак плюс.Итак, синтаксическая ошибка и сообщение об ошибке операнда.Подобно тому, как синтаксический анализатор видит $(( (5) + (+) ))
    • сводку: первый плюс в порядке, второй - ошибка.
...