W danej powłoce normalnie ustawiłbym zmienną lub zmienne, a następnie uruchomiłem polecenie. Ostatnio dowiedziałem się o koncepcji przygotowania definicji zmiennej do polecenia:
FOO=bar somecommand someargs
To działa ... w pewnym sensie. Nie działa, gdy zmieniasz zmienną LC_ * (która wydaje się wpływać na polecenie, ale nie jego argumenty, na przykład zakresy znaków „[az]”) lub gdy przekazujesz dane wyjściowe do innego polecenia w ten sposób:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
Mogę również dodać somecommand2 z „FOO = bar”, co działa, ale dodaje niechciane powielanie i nie pomaga w argumentach interpretowanych w zależności od zmiennej (na przykład „[az]”).
Więc jaki jest dobry sposób, aby to zrobić na jednej linii?
Myślę o czymś w kolejności:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
Mam wiele dobrych odpowiedzi! Celem jest utrzymanie tego jednowarstwowego, najlepiej bez użycia „eksportu”. Metoda wykorzystująca wywołanie Basha była ogólnie najlepsza, chociaż wersja w nawiasach z „eksportem” była nieco bardziej zwarta. Interesująca jest również metoda przekierowania zamiast potoku.
(T=$(date) echo $T)
zadziała