2015-12-01 6 views
0

Может ли кто-нибудь объяснить цель declare -i в bash? Это для безопасности, чтобы вы не выполняли строковые операции над числами?В чем смысл `declare -i` в bash? Ограничивает ли переменная только число?

Если я назначаю номер строки для переменной, я могу уже выполнять на ней математические функции, так что в чем смысл declare -i?

+1

Имейте [посмотреть здесь] (http: // www.tldp.org/LDP/abs/html/declareref.html). – RedX

+0

Спасибо RedX. Еще раз спасибо, чтобы соответствовать требованиям длины комментариев. – bodacydo

+1

Баш-переменные не «набраны», а 'declare -i' позволяет вам« нажимать »на оболочку, которая должна ожидать найти целочисленное значение в переменной, что, в свою очередь, позволяет арифметические операции над этой переменной без повышения ошибка (например, '((foo ++))') и т. д. –

ответ

2

declare -i устанавливает атрибут integer для имени. Он не влияет на на использование переменной, только присваивает переменной. Правая часть задания обрабатывается так, как если бы это было арифметическое выражение, так что foo=3+5, foo="3 + 5" и foo=$((3 + 5)) идентичны.

На мой взгляд, это не очень полезно, так как оно дает небольшую выгоду по явному арифметическому выражению. Вы сохраняете 3 символа, "..." против $((...)), (если вы не можете спокойно оставить выражение без кавычек). Хуже того, он скрывает семантику задания в той точке, в которой он фактически сделан. (То есть, когда вы видели назначение, вам нужно посмотреть, есть ли атрибут integer в имени, прежде чем вы узнаете, что на самом деле назначает.)