Я знаю в оболочке (удар), арифметическая операция могла быть сделана внутри ((..))
,
например.
i=1
((i++)) #i=1
((i+=1)) #i=3
Мой вопрос:
Что точно сделало ((..))
? Это создает переменную без имени?
Синтаксис Арифметического выражения -
(( expression ))
выражение оценен согласно правилам, описанным при АРИФМЕТИЧЕСКОЙ ОЦЕНКЕ. Если значение выражения является ненулевым, статус возврата 0; иначе статус возврата равняется 1. Это точно эквивалентно let "expression"
.
Арифметическое расширение позволяет оценку арифметического выражения и замену результата. Формат для арифметического расширения:
$(( expression ))
выражение рассматривают, как будто это было в двойных кавычках , но двойную кавычку в круглых скобках не рассматривают особенно. Все маркеры в выражении подвергаются параметру и переменному расширению, управляют заменой и заключают удаление в кавычки. Результат рассматривают как арифметическое выражение, которое будет оценено. Могут быть вложены арифметические расширения.
символы Включения в двойных кавычках сохраняют литеральное значение всех символов в кавычках , за исключением $, \, и, когда расширение истории включено!. $ символов и 'сохраняют свое особое значение в двойных кавычках. Обратная косая черта сохраняет свое особое значение только, когда сопровождается одним из следующих символов: $, ", \, или. Двойная кавычка может быть заключена в кавычки в двойных кавычках путем предшествования ему с обратной косой чертой. Если включено, расширение истории будет выполнено если! появления в двойных кавычках оставляют с помощью обратной косой черты. Обратная косая черта, предшествующая! не удален.
Это позволяет вычисление mathmatical выражения и замену результата
, Арифметическое расширение позволяет оценку арифметического выражения и замену результата. Формат для арифметического расширения:
$ ((выражение))
выражение рассматривают, как будто это было в двойных кавычках, но двойную кавычку в круглых скобках не рассматривают особенно. Все маркеры в выражении подвергаются расширению параметра, представляют расширение в виде строки, управляют заменой и заключают удаление в кавычки. Могут быть вложены арифметические расширения.
оценка выполняется согласно правилам, упомянутым ниже при АРИФМЕТИЧЕСКОЙ ОЦЕНКЕ. Если выражение недопустимо, удар печатает сообщение, указывающее на отказ, и никакая замена не происходит. <глоток> Страница справочника Bash глоток>
((..))
просто говорит интерпретатору оболочки, что Вы будете делать арифметику. Обычно в ударе Вам были бы нужны обратные галочки `...`
, чтобы сделать арифметику. Это - альтернативный синтаксис, который является большим количеством C как и позволяет вещам как я ++ увеличивать переменную i
1. Существует ответ на stackoverflow, который объясняет его хорошо.
В bash
(не в оболочке POSIX), ((выражение)) позволяют Вам делать арифметическую оценку. Это совпадает с:
let "expression"
Это не создает переменных без имени, это оценило выражение в текущей оболочке, влиял на все переменные в текущем контексте оболочки. Если значение выражения является ненулевым, статус возврата 0, иначе статус возврата равняется 1.
Примечание это ((...))
и let
функции от ksh
и только доступный в bash
, zsh
и ksh
. Вы должны с помощью ((..))
let
потому что это более четкий и легкий заключить в кавычки, чем использование let
.
Для мобильности, с помощью $ ((...)) создают.