दिए गए शेल में, आम तौर पर मैं एक चर या चर सेट करता हूं और फिर एक कमांड चलाता हूं। हाल ही में मैंने एक कमांड में एक चर परिभाषा को प्रस्तुत करने की अवधारणा के बारे में सीखा:
FOO=bar somecommand someargs
यह काम करता है ... तरह का। जब आप एक LC_ * चर को बदल रहे हैं तो यह काम नहीं करता है (जो कमांड को प्रभावित करता है, लेकिन इसके तर्कों को नहीं , उदाहरण के लिए, '[az]' char पर्वतमाला) या जब दूसरी कमांड में आउटपुट को पाइपिंग करता है:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
मैं somecommand2 को "FOO = बार" के साथ भी प्रस्तुत कर सकता हूं, जो काम करता है, लेकिन जो अवांछित दोहराव को जोड़ता है, और यह उन तर्कों के साथ मदद नहीं करता है जिनकी व्याख्या चर के आधार पर की जाती है (उदाहरण के लिए, '[az]')।
तो, एक लाइन पर ऐसा करने का एक अच्छा तरीका क्या है?
मैं के आदेश पर कुछ सोच रहा हूँ:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
मुझे बहुत अच्छे जवाब मिले! लक्ष्य यह "निर्यात" का उपयोग किए बिना अधिमानतः एक-लाइनर रखने के लिए है। बैश के लिए एक कॉल का उपयोग करने का तरीका समग्र रूप से सबसे अच्छा था, हालांकि इसमें "निर्यात" के साथ पैतृक संस्करण थोड़ा अधिक कॉम्पैक्ट था। पाइप के बजाय पुनर्निर्देशन का उपयोग करने का तरीका दिलचस्प है।
(T=$(date) echo $T)
काम करेगा