From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 15 Oct 2006 14:55:03 +0400 From: Maksim Otstavnov X-Mailer: The Bat! (v1.51) Personal Organization: home office X-Priority: 3 (Normal) Message-ID: <1242923031.20061015145503@otstavnov.com> To: community@lists.altlinux.org In-Reply-To: <20061015072634.GA7677@procyon.home> References: <45316999.9080600@gmail.com> <20061015072634.GA7677@procyon.home> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit Subject: Re: [Comm] sh - bash X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.9rc1 Precedence: list Reply-To: Maksim Otstavnov , ALT Linux Community List-Id: ALT Linux Community List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 15 Oct 2006 11:05:54 -0000 Archived-At: List-Archive: List-Post: Hello Sergey, Sunday, October 15, 2006, 11:26:34 AM, you wrote: SV> Правда, в стандарте есть одна проблема: там написано, что $(($x) и SV> $((x)) должны работать одинаково, но возможность использовать SV> переменные без $ в произвольных выражениях явно не прописана; Так а второе из первого не следует. Я бы исходил из того, что такой возможности нет. SV> в результате существуют варианты /bin/sh, для которых заявлена SV> совместимость с POSIX, но выражения вида $((A+B)) там не работают. SV> Использование же конструкций вида $(($A+$B)) потенциально опасно, SV> если переменные могут содержать непроверенные данные, не являющися SV> целыми числами. А чем бы помогло " $((A+B))"? Кстати, и для раскрытия одной одвускобленной переменной написано, что "*If the shell variable x contains a value that forms a valid integer constant*, then the arithmetic expansions "$((x))" and "$(($x))" shall return the same value" (Ibid., 2.3.6). Не вполне понятно, как должна вести себя оболочка при нецелом или нечисловом значении x; вполне возможно, что последнее предложение в следующем за процитированным абзаце ("If the expression is invalid, the expansion fails and the shell shall write a message to standard error indicating the failure") просто забили отбить абзацем, и оно относится к любому арифметическому раскрытию, а не только к случаям поддержки нестандартных операций или иных типов переменных, о которых говорится в сем абзаце. Я, по крайней мере, столкнувшись некоторое время назад с этим вопросом, понял это так: и "$((x))", и "$(($x))" при неподдерживаемом арифметическом типе x или нечисловом x _должны_ (SHALL) вызывать ошибку раскрытия. Есть другие идеи? PS: А опечаток-то в тексте 2004 г.... :( -- -- Maksim