[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