[freebsd] test и пустые строки
Irina Liakh
spell at itl.ua
Tue Nov 21 20:57:33 EET 2017
On Tue, Nov 21, 2017 at 04:12:46PM +0200, Valentin Nechayev wrote:
>
> Tue, Nov 21, 2017 at 14:55:11, spell wrote about "Re: [freebsd] test и пустые строки":
>
> > > Я в таких случаях _никогда_ не надеюсь на постулаты типа "эта команда
> > > никогда не выдаст более одного слова";
> >
> > Даже если эта команда - "echo 1"? ;)
>
> Да.
Нуу, просто если даже на это нельзя положиться, тогда, чтобы быть последовательным,
надо подстилать соломку на каждом шагу, и под соломку соломку, и так до
бесконечности.
> > > если где-то записано `x` вместо
> > > "`x`", это следует считать прямой командой шеллу перепарсить вывод, а
> > > такие команды не надо использовать, если нет на то прямого указания.
> >
> > Не поняла, почему "перепарсить"?
>
> Потому что он обязан это сделать. Принять строку, разделить IFS??ами
> (field splitting) и набрать аргументов, сколько получилось после
> разделения. А если в кавычках, то это правило выключается.
Поняла, согласна теперь.
> > > Ну и если "всё очевидно", то что мешает упростить работу шеллу в
> > > случае test?
> >
> > В смысле?
>
> В смысле, что если "$x" вместо $x, не будет запускаться field
> splitting, независимо от того, там одно реальное поле или нет.
То же.
> Честно - это надо обдумать. Беру таймаут.
Ещё соображения:
Флаг ZF (zero flag) устанавливается в 1 когда результат операции
равен нулю. Единица обозначает ноль. Это же абсолютно коряво.
Флаг чётности, отражающий чётное количество единиц нечётной цифрой -
туда же.
Ну и так, больше юзерское соображение: если нужно создать enum с
вариантами ответов "да/нет", то более натуральный порядок следования
будет "да, нет", а не "нет, да", и индексы будут выданы соответственно
0-да, 1-нет.
Имхо, устоявшаяся модель с 0-false является источником недоразумений,
ошибок, проблем и более длинного кода, наподобие как это делает
отсчёт индексов массивов в Паскале с единицы.
Одним словом, нарушает принцип KISS.
> > > И не везде она такая (вон в Windows положительные коды -
> > > успех, отрицательные - ошибка, и в обоих множествах 2 миллиарда
> > > возможностей).
> >
> > Зашибись решение. Стоит только не проследить за типом данных
> > (signed/unsigned и длиной в байтах) как вуаля - лёгким движением руки
> > отрицательное превращается в положительное.
>
> Ну а в юниксах очень похоже.
> Я не смотрел, какой интерфейс сисколлов в 64-битных FreeBSD, но в
> Linux это так - значения от (со знаком) -4096...-1 это ошибки
> (-errno), а остальные - положительные (например, дескрипторы файлов).
Разумеется, речь не о тех функциях, которые по определению возвращают
спектр положительных результатов.
> Ну а "не проследить" за такими вещами в C это настолько глобальная
> ошибка, что вряд ли уже можно с ней мириться...
Это ж надо следить. А так ноль - он везде ноль, в любом целочисленном
типе данных.
More information about the freebsd
mailing list