[freebsd] test и пустые строки

Valentin Nechayev netch at netch.kiev.ua
Tue Nov 21 16:12:46 EET 2017


hi,

 Tue, Nov 21, 2017 at 14:55:11, spell wrote about "Re: [freebsd] test и пустые строки": 

> > Да, тут понятие null string требует расшифровки или замены на более
> > понятное, типа empty string.
> 
> Empty string не годится потому что в таком случае не отражает реальное
> положение вещей. Синтаксис же допускает как non-zero-length string и
> zero-lengh string так и отсутствие оной.

Эти случаи можно рассмотреть отдельно, получится понятнее.

> > Я в таких случаях _никогда_ не надеюсь на постулаты типа "эта команда
> > никогда не выдаст более одного слова";
> 
> Даже если эта команда - "echo 1"? ;)

Да.

> Моя команда точно не выводит более одного слова :)
> 
> > если где-то записано `x` вместо
> > "`x`", это следует считать прямой командой шеллу перепарсить вывод, а
> > такие команды не надо использовать, если нет на то прямого указания.
> 
> Не поняла, почему "перепарсить"?

Потому что он обязан это сделать. Принять строку, разделить IFSʼами
(field splitting) и набрать аргументов, сколько получилось после
разделения. А если в кавычках, то это правило выключается.

> > Ну и если "всё очевидно", то что мешает упростить работу шеллу в
> > случае test?
> 
> В смысле?

В смысле, что если "$x" вместо $x, не будет запускаться field
splitting, независимо от того, там одно реальное поле или нет.

> > > Да-да..
> > > Если бы мне дали всё исправить, я бы начала с того, что 0 - это true,
> > > а 1 - false. (начиная с машинной логики, а не только в шеллах)
> > 
> > Вот тут не согласен. В шелле такая логика потому, что успешных
> > завершений один код, а неуспешных - много. Но именно поэтому она
> > обратная.
> 
> Имхо, в шелле как раз нормальная логика. Успех - он и в Африке успех,
> для него достаточно одного кода. А поводов для файлура может быть
> множество, и когда каждый код выхода означает определённый reason -
> это просто счастье и благодать. И естественно отдать 0, как единственный
> в своём роде, успеху, а остальные ненули - ошибкам.
> И очень легко делать проверку: if (true), условно говоря.
> 
> А вот в Сишечке необходимость выворачивать наизнанку смысл
> кода возврата:
> 
>     if (!somefunc()) printf("success")
> 
> меня расстраивает... Это при том, что логика кодов возврата
> та же (0 - success, >0 - failure).
> 
> Да и вообще! 0 - true и 1 - false логично хотя бы потому, что
> 0 - это чёт, а 1 - нечет. Само по себе понятие "нечет" (а хоть бы даже и
> odd) несёт в себе отрицательный смысл, и его логичней привязать к false.
> Щетаю, что из "0 - false" растут многие сложности, созданные на ровном
> месте и совершенно ненужные.

Честно - это надо обдумать. Беру таймаут.

> 
> > И не везде она такая (вон в Windows положительные коды -
> > успех, отрицательные - ошибка, и в обоих множествах 2 миллиарда
> > возможностей).
> 
> Зашибись решение. Стоит только не проследить за типом данных
> (signed/unsigned и длиной в байтах) как вуаля - лёгким движением руки
> отрицательное превращается в положительное.

Ну а в юниксах очень похоже.
Я не смотрел, какой интерфейс сисколлов в 64-битных FreeBSD, но в
Linux это так - значения от (со знаком) -4096...-1 это ошибки
(-errno), а остальные - положительные (например, дескрипторы файлов).
Ну а "не проследить" за такими вещами в C это настолько глобальная
ошибка, что вряд ли уже можно с ней мириться...


-netch-


More information about the freebsd mailing list