В данной оболочке обычно я устанавливал переменную или переменные, а затем запускал команду. Недавно я узнал о концепции добавления переменной определения к команде:Настройка переменной окружения перед тем, как команда в bash не работает для второй команды в трубе
FOO=bar somecommand someargs
Это работает ... отчасти. Это не работает, когда вы меняете переменную LC_ * (которая, по-видимому, влияет на команду, но не ее аргументы, например, «[az]» диапазоны символов), или когда вывод трубопровода в другую команду:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
я могу предварять somecommand2 с «Foo = бар», а также, который работает, но который добавляет нежелательное дублирование, и это не помогает с аргументами, которые интерпретируются в зависимости от переменной (например, «[AZ]»)
Итак, что это хороший способ сделать это на одной линии? Я что-то думаю о порядке:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
Редактировать: Я получил много хороших ответов! Цель состоит в том, чтобы сохранить это однострочное изображение, предпочтительно без использования «экспорта». Метод, использующий призыв к bash, был лучшим в целом, хотя скобковая версия с «export» в нем была немного более компактной. Интересен также метод использования перенаправления, а не трубы.
'(T = $ (дата) эхо $ T)' будет работать –
В контексте межплатформенных (включая окна) скриптов или проектов на основе npm (js или else), вы можете взглянуть на [кросс-env-модуль] (https://www.npmjs.com/package/cross -env). –
Я надеялся, что один из ответов также объяснит * почему * это только вид работ, то есть почему он не эквивалентен экспорту переменной перед вызовом. –