declare -i
устанавливает атрибут integer
для имени. Он не влияет на на использование переменной, только присваивает переменной. Правая часть задания обрабатывается так, как если бы это было арифметическое выражение, так что foo=3+5
, foo="3 + 5"
и foo=$((3 + 5))
идентичны.
На мой взгляд, это не очень полезно, так как оно дает небольшую выгоду по явному арифметическому выражению. Вы сохраняете 3 символа, "..."
против $((...))
, (если вы не можете спокойно оставить выражение без кавычек). Хуже того, он скрывает семантику задания в той точке, в которой он фактически сделан. (То есть, когда вы видели назначение, вам нужно посмотреть, есть ли атрибут integer
в имени, прежде чем вы узнаете, что на самом деле назначает.)
Имейте [посмотреть здесь] (http: // www.tldp.org/LDP/abs/html/declareref.html). – RedX
Спасибо RedX. Еще раз спасибо, чтобы соответствовать требованиям длины комментариев. – bodacydo
Баш-переменные не «набраны», а 'declare -i' позволяет вам« нажимать »на оболочку, которая должна ожидать найти целочисленное значение в переменной, что, в свою очередь, позволяет арифметические операции над этой переменной без повышения ошибка (например, '((foo ++))') и т. д. –