Почему делает $ ((40 - 35)), превращаются 5?

Это должно работать (замена _ чем-то еще должна он сталкиваться с Вашими журналами):

sed -e 's/pattern/_&/1' -e 's/\([^_]\)pattern//g' -e 's/_\(pattern\)/\1/'
3
02.09.2011, 09:09
2 ответа

От bash страница справочника:

  ((expression))
          The expression is evaluated according  to  the  rules  described
          below  under ARITHMETIC EVALUATION.  If the value of the expres-
          sion is non-zero, the return status is 0; otherwise  the  return
          status is 1.  This is exactly equivalent to let "expression".

И далее:

  Arithmetic Expansion
    Arithmetic expansion allows the evaluation of an arithmetic expression and
    the substitution of the result.  The format for arithmetic expansion is:

          $((expression))

Что-либо посаженное в двойной parens становится математическим выражением это bash оценит.

15
27.01.2020, 21:07

Это - арифметическое расширение. Это поддерживается во всех оболочках POSIX (это не существовало в исходной Оболочке Bourne). Синтаксис арифметического выражения является главным образом тем же как на языке C.

Можно использовать переменные с или без a $ в арифметическом выражении. Без a $, переменная стоит как переменная и может в особенности быть присвоена; например, echo $((a=4)) $a печать 4 4. С a $, оболочка выполняет простое текстовое расширение; например, a=2+2; echo $(($a)) печать 4 тогда как a=2+2; echo $((a)) ошибка (но печатает 4 на некоторых оболочках так или иначе).

Точные правила для решения, ли $(( начинает замену команды ($(command) где команда, оказывается, начинается с вводной круглой скобки) или арифметическое выражение ($((expression))) варьируйтесь от оболочки до оболочки. Если Вы хотите выполнить замену команды, и команда начинается (, поместите пространство для сейфа: $( (echo hello)) (такие команды редки, который является, почему синтаксис мог быть добавлен без любой практической опасности беспорядка).

4
27.01.2020, 21:07

Теги

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