LINUX.ORG.RU
Ответ на: комментарий от vel

это не шелл, это test

Если уж придираться к словам, то test и [ могут быть (и обычно являются) встроенными командами шелла.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

И то и то нечитабельное уродство.

Deleted
()
Ответ на: комментарий от GblGbl

собирать софт с busybox-shell ?

Месье знает толк в извращении :)

Эта хрень повсеместно встречается в configure-скриптах

if test "x$as_myself" = x; then

vel ★★★★★
() автор топика

Могу ошибаться, но вроде такие конструкции когда-то давно были нужны для обхода пустой переменной.

из [ «$A» = «qwe» ] получалось [ «» = «qwe» ] и тест огорчался из-за синтаксиса, т.к. пустые кавычки почему то игнорировались.

sergej ★★★★★
()
Ответ на: комментарий от ionanahin

По твоей ссылке фигня, так как [[ это не posix sh и парсится по правилам для ключевых слов, а не по правилам для команд, и костыли вида "x$A" = "x" там не нужны. Впрочем, там в том треде ниже написали уже.

d_a ★★★★★
()
Ответ на: комментарий от sergej

Это если ты в кавычки не возмешь $A, то шелл пропустит первый аргумент и тест получит непонятную ему конструкцию.

Я понимаю зачем этот огород городили - для совместимости.

Вопрос - кто этот уродец?

vel ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

The Bourne shell, introduced with the «7th edition» of Unix in 1979, is an important part of the Unix history. Its grammar is the core of several modern shells. Even some later variants of the traditional Bourne shell are in use until today. However, there's little common knowledge about all these variants, because they never had been «versioned» — this page tries to document their way.

Этот? Хорошо бы найти «man test» от него...

Интересная ссылка http://www.in-ulm.de/~mascheck/various/test/

vel ★★★★★
() автор топика
Последнее исправление: vel (всего исправлений: 2)
Ответ на: комментарий от vel

Этот, да.

Хорошо бы найти «man test»

М.И. Беляков, Ю.И. Рабовер, А.Л. Фридман Мобильная операционная система. Справочник. М.: Радио и связь, 1991 г

%)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Живой такой пример :)

Примерно это я и ожидал услышать - для совместимости с мертвыми системами. Небось в каком-нибудь xenux использовался или старой СКОтине.

vel ★★★★★
() автор топика

Всё ещё широко используется в OpenBSD rc.

Post by Jet Nul
|| Potentially unset variables
|| Remember that variables may not be set, or may be set to the null
|| string. For instance, you may be tempted to write
||
|| if [ $answer = yes ]; then
||
|| However, $answer might be set to the empty string, so sh would see
|| if [ = yes ]; then, which would cause an error. Better to write
||
|| if [ «$answer» = yes ]; then
||
|| The danger here is that $answer might be set to -f, so sh would see
|| if [ -f = yes ]; then, which would also cause an error.
||
|| Therefore, write
||
|| if [ x"$answer" = xyes ]; then
||
|| which avoids both of these problems.

This is a bug in very old sh implementations, but not in pdksh as
is included with OpenBSD.

[ «$answer» = yes ]

Will work fine with ksh. But the OpenBSD teams wants to maintain
portability with older shells, just incase someone decides he
wants to install such an old shell.

ref: http://misc.openbsd.narkive.com/sLcffPRy/test-usage-in-openbsd-shell-scripts

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от intelfx

Молодой человек, не смешите мои тапочки.

Сколько платформ поддерживает ненужнод? Адын, два? (linux/386, linux/amd64, ...?)

И на скольки платформах работает rc без изменений? (28 архитектур obsd, 49 архитектур nbsd, ...)

beastie ★★★★★
()
Ответ на: комментарий от beastie

У тебя мания какая-то. Разве я говорил про что-то, кроме rc? И разве я говорил про его распространённость? Нет, я говорил про то, что он легаси-дерьмище.

intelfx ★★★★★
()
Ответ на: комментарий от beastie

Круто, в башике починено:

$ [ -f = 'yes' ]; echo $?
1
$ [ -f = '-f' ]; echo $?
0
$ [ -z = '-f' ]; echo $?
1
$ [ -z = '-z' ]; echo $?
0
$ [ -z = ]; echo $?
1
$ [ -n = ]; echo $?
0
$ type [
[ є вбудованою командою оболонки
$ $0 --version
GNU bash, версія 4.3.42(1)-release (x86_64-pc-linux-gnu)
© Free Software Foundation, Inc., 2013
Ліцензія GPLv3+: GNU GPL версія 3 чи новіша <http://gnu.org/licenses/gpl.html>

Це вільне програмне забезпечення; ви можете його змінювати та розповсюджувати.
Не надається НІЯКИХ ГАРАНТІЙ у межах, передбачених законом.
Я-то думал, всё будет в лучших традициях опенсорса — WONTFIX.

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 2)
Ответ на: комментарий от KennyMinigun

Правда в приоритеты не умеет:

$ [ -z = -o -n = ]; echo $?
bash: [: забагато аргументів
2

KennyMinigun ★★★★★
()
Ответ на: комментарий от intelfx

Нет, я говорил про то, что он легаси-дерьмище.

Тот, кто не ценит прошлое — не достоин будущего. (c)

Linux с unix — это тоже легаси-дерьмище, так же как X11, lapack и 99% всего, что нажили со времён Ады. Ты адресом случайно не ошибся, мой любимый революционер-улутшатель-я-знаю-всё-лучше-вас-как-надо? ;)

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

«man test» образца 1995 года (Slackware 3.0) говорит, что "-z" уже тогда было.

Это заменяет x$a = x, но не x$a = xyes.

Впрочем, если следовать рекомендации использовать set -eu везде, то надо писать всё равно ${a:-no} = yes.

proud_anon ★★★★★
()
Ответ на: комментарий от beastie

Легаси != легаси-дерьмище. Хотя X11 — это тоже оно. А LAPACK'ом я не пользовался, поэтому не знаю.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.