Несколько список команд после условных выражений Shell, &&, ||. Сценарий оболочки, тире

49 710 дней = 4294944000 секунд - который является устрашающе близко к круглому числу, если Вы рассчитываете в двоичном файле.

2^32 секунды составляют 49 710,27 дней - походит на метку времени для последней проверки Вашей файловой системы, взорванной где-нибудь вдоль строки. Это может быть признаком проблемы с Вашим диском - я рекомендовал бы заняться расследованиями далее.

4
28.12.2011, 01:13
3 ответа

Я склонен использовать что-то вроде этого, которое я считаю приятно читаемыми:

[ -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.

Таким образом, единственная возможность, которую я вижу, состоит в том, если Вы переопределили : быть чем-то еще. Я буду интересоваться наблюдением любых возможностей относительно того, каково это могло быть.

5
27.01.2020, 20:48
  • 1
    , который я уже знал, как записать это с {}но я ценю усилие. Путем это было, покончили :был самый изящный и краткий метод, который я когда-либо видел! Никакие функции или что-либо кроме некоторых тщательно размещенных : &&и || –  J. M. Becker 27.12.2011, 07:28
  • 2
    @TechZilla - Вы уверенный, что он позволил бы тот же поток выполнения как оператор, который я отправил? –  nicerobot 27.12.2011, 07:37
  • 3
    @TechZilla я заинтригован тем, чем это могло быть всего лишь, IMO, это не хорошая идея использовать умный, "неочевидный" код. Сценарии могут уже быть достаточно тупыми, не вводя редкий синтаксис в соединение. Кроме того, помимо того, чтобы просто быть интересным осуществлением или к позерству, кажется, что единственное использование для такой техники является путаницей, независимо от того, как "изящный и краткий" это кажется Вам. Если Вы не можете помнить, как сделать это, Вы могли бы также забыть то, что это означает поэтому, даже если Вы пишете сценарий только для себя, Вы обязаны сделать свою жизнь более сложной путем попытки быть умными. Просто мои 2¢ –  nicerobot 27.12.2011, 18:47
  • 4
    , который я проголосовал за Ваш ответ и в последний раз комментирую для всей справки, которую Вы предложили мне. Вы также высказываете очень истинное мнение в своих 2¢, но бог запрещает, если я когда-нибудь вижу тот код снова.... Верьте мне, Вы уважали бы метод, если я мог бы найти его. –  J. M. Becker 27.12.2011, 22:48
  • 5
    дал Вам ответ для помощи, я собираюсь записать им как Ваш указанный пример. –  J. M. Becker 29.12.2011, 05:00

Более читаемая альтернатива

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), Вы не можете выполнить больше чем одну команду в основном процессе оболочки; все кроме каждый будет в подоболочке.

5
27.01.2020, 20:48

попробуйте это [[$var]] && echo "something" || echo "something";

0
27.01.2020, 20:48
  • 1
    Ваш не схватывание вопроса, не действительно характерный для эха. Действительно о выполнении нескольких команд после И или ИЛИ. Конкретно не использование {}, () или if. Я сделал это прежде с некоторыми, неочевидно, размещенными :, не может помнить как, ища как безумный то сообщение в блоге. Все еще цените справку. –  J. M. Becker 27.12.2011, 08:54
  • 2
    , который я просто попробовал этот '[[$var]] &&, отзывается эхом, "что-то" || повторяет "что-то"'; здесь можно заменить эхо любой другой командой. –  harish.venkat 27.12.2011, 11:34
  • 3
    функционально, который является старым резервным устройством, "И делает это, если 0, ИЛИ делают это, если 1" выполнение файлов в течение многих лет, это - другая проблема. больше как... "ИЛИ сделайте это, если 1, И если Вы, это длится ИЛИ делает это также" –  J. M. Becker 27.12.2011, 22:40
  • 4
    Также использование [[]] не то же как [], даже при том, что можно сделать то же и т.д. Его на самом деле намного более простой использовать, и возможно если тест не создается в оболочке... Но это - bashism и потребность, по крайней мере, быть достаточно портативным для тире. Конкретный Linux в порядке, даже 95% POSIX в порядке, если Он может быть выполнен в тире. Можно записать ту же функциональность как [[$VAR]] как [ $VAR ] вместо этого. –  J. M. Becker 27.12.2011, 22:45

Теги

Похожие вопросы