оболочка - что точно удваивает квоту ((..)) средний?

Я знаю в оболочке (удар), арифметическая операция могла быть сделана внутри ((..)),

например.

i=1
((i++)) #i=1
((i+=1)) #i=3

Мой вопрос:

Что точно сделало ((..)) ? Это создает переменную без имени?

2
задан 8 January 2015 в 01:42

4 ответа

Синтаксис Арифметического выражения -

(( expression ))

выражение оценен согласно правилам, описанным при АРИФМЕТИЧЕСКОЙ ОЦЕНКЕ. Если значение выражения является ненулевым, статус возврата 0; иначе статус возврата равняется 1. Это точно эквивалентно let "expression".

Арифметическое расширение позволяет оценку арифметического выражения и замену результата. Формат для арифметического расширения:

$(( expression ))

выражение рассматривают, как будто это было в двойных кавычках , но двойную кавычку в круглых скобках не рассматривают особенно. Все маркеры в выражении подвергаются параметру и переменному расширению, управляют заменой и заключают удаление в кавычки. Результат рассматривают как арифметическое выражение, которое будет оценено. Могут быть вложены арифметические расширения.

символы Включения в двойных кавычках сохраняют литеральное значение всех символов в кавычках , за исключением $, \, и, когда расширение истории включено!. $ символов и 'сохраняют свое особое значение в двойных кавычках. Обратная косая черта сохраняет свое особое значение только, когда сопровождается одним из следующих символов: $, ", \, или. Двойная кавычка может быть заключена в кавычки в двойных кавычках путем предшествования ему с обратной косой чертой. Если включено, расширение истории будет выполнено если! появления в двойных кавычках оставляют с помощью обратной косой черты. Обратная косая черта, предшествующая! не удален.

Ссылка

0
ответ дан 9 November 2019 в 18:27

Это позволяет вычисление mathmatical выражения и замену результата

, Арифметическое расширение позволяет оценку арифметического выражения и замену результата. Формат для арифметического расширения:

$ ((выражение))

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

оценка выполняется согласно правилам, упомянутым ниже при АРИФМЕТИЧЕСКОЙ ОЦЕНКЕ. Если выражение недопустимо, удар печатает сообщение, указывающее на отказ, и никакая замена не происходит. <глоток> Страница справочника Bash

0
ответ дан 9 November 2019 в 18:27

((..)) просто говорит интерпретатору оболочки, что Вы будете делать арифметику. Обычно в ударе Вам были бы нужны обратные галочки `...`, чтобы сделать арифметику. Это - альтернативный синтаксис, который является большим количеством C как и позволяет вещам как я ++ увеличивать переменную i 1. Существует ответ на stackoverflow, который объясняет его хорошо.

0
ответ дан 9 November 2019 в 18:27

В bash (не в оболочке POSIX), ((выражение)) позволяют Вам делать арифметическую оценку. Это совпадает с:

let "expression"

Это не создает переменных без имени, это оценило выражение в текущей оболочке, влиял на все переменные в текущем контексте оболочки. Если значение выражения является ненулевым, статус возврата 0, иначе статус возврата равняется 1.

Примечание это ((...)) и let функции от ksh и только доступный в bash, zsh и ksh. Вы должны с помощью ((..)) let потому что это более четкий и легкий заключить в кавычки, чем использование let.

Для мобильности, с помощью $ ((...)) создают.

0
ответ дан 3 December 2019 в 00:52

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

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