[Comm] sh - bash

Maksim Otstavnov =?iso-8859-1?q?maksim_=CE=C1_otstavnov=2Ecom?=
Вс Окт 15 14:55:03 MSD 2006


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





Подробная информация о списке рассылки community