49 710 дней = 4294944000 секунд - который является устрашающе близко к круглому числу, если Вы рассчитываете в двоичном файле.
2^32 секунды составляют 49 710,27 дней - походит на метку времени для последней проверки Вашей файловой системы, взорванной где-нибудь вдоль строки. Это может быть признаком проблемы с Вашим диском - я рекомендовал бы заняться расследованиями далее.
Я склонен использовать что-то вроде этого, которое я считаю приятно читаемыми:
[ -z $VAR ] && {
echo "Error msg"
exit ${LINENO}
} >&2
Для :
, единственная вещь, которую я могу вообразить, состоит в том, что Вы так или иначе определили функцию, но я понятия не имею, как это перевело бы в блок, который позволяет нескольким командам выполняться.
От man bash
:
: [arguments]
No effect; the command does nothing beyond expanding arguments and
performing any specified redirections. A zero exit code is returned.
Таким образом, единственная возможность, которую я вижу, состоит в том, если Вы переопределили :
быть чем-то еще. Я буду интересоваться наблюдением любых возможностей относительно того, каково это могло быть.
Более читаемая альтернатива
if [ "$VAR" ]; then
echo "Error msg" 1>&2
exit 1
fi
Я знаю, что это не то, что Вы ищете. Но это - то, что необходимо записать. Используя &&
и ||
здесь является несколько загадочным. Я понятия не имею, что Вы помните (или misremembering), но независимо от того, что это, если никто здесь не может даже предположить, каково это, это уверенный не является что-то, что квалифицирует как “читаемое”.
Между прочим, отметьте кавычки вокруг $VAR
. Всегда помещайте двойные кавычки вокруг подстановок переменных, если Вы не знаете, почему необходимо пропустить кавычки и почему безопасно сделать так. (Вам не нужны кавычки внутри [[ … ]]
, но Вы уверенный делаете внутри [ … ]
).
eval
подлый путь состоит в том, чтобы сгруппировать команды, но использование его не квалифицирует как читаемое.
Другой способ произвести вывод в другой команде состоит в том, чтобы сделать это в замене команды. Снова, это не квалифицирует как читаемое.
[ "$VAR" ] && exit 1$(echo "error message" >&2)
Без некоторой формы группирующейся конструкции (является ли это фигурными скобками или некоторой другой составной формой как if
/then
/fi
или while
/do
/done
), Вы не можете выполнить больше чем одну команду в основном процессе оболочки; все кроме каждый будет в подоболочке.
попробуйте это [[$var]] && echo "something" || echo "something";
{}
, ()
или if
. Я сделал это прежде с некоторыми, неочевидно, размещенными :
, не может помнить как, ища как безумный то сообщение в блоге. Все еще цените справку.
– J. M. Becker
27.12.2011, 08:54
[[]]
не то же как []
, даже при том, что можно сделать то же и т.д. Его на самом деле намного более простой использовать, и возможно если тест не создается в оболочке... Но это - bashism и потребность, по крайней мере, быть достаточно портативным для тире. Конкретный Linux в порядке, даже 95% POSIX в порядке, если Он может быть выполнен в тире. Можно записать ту же функциональность как [[$VAR]]
как [ $VAR ]
вместо этого.
– J. M. Becker
27.12.2011, 22:45
{}
но я ценю усилие. Путем это было, покончили:
был самый изящный и краткий метод, который я когда-либо видел! Никакие функции или что-либо кроме некоторых тщательно размещенных:
&&
и||
– J. M. Becker 27.12.2011, 07:28