यह सही ढंग से प्रिंट करता है test

$ echo 'this is a test' | awk '{print $4}'
test

/bin/bash -c के अंदर इस कमांड का उपयोग करते समय काम नहीं करता

/bin/bash -c "echo 'this is a test' | awk '{print $4}'"
this is a test

/bin/bash -c के साथ उपयोग करते समय मैं सही ढंग से काम करने के लिए कैसे जाग सकता हूं?

2
Catfish 15 अप्रैल 2021, 21:29
हाँ: /bin/bash -c "echo 'this is a test' | awk '{print \$4}'"
 – 
0stone0
15 अप्रैल 2021, 21:32
1
नोट: आपको $ से बचना होगा। एक डुप्लिकेट के लिए बीमार खोज;)
 – 
0stone0
15 अप्रैल 2021, 21:32
1
Phh, किसी प्रकार का डिस्लेक्सिया? 'यह' !== 'परीक्षण'.... वेक अप कॉल के लिए Thx।
 – 
0stone0
15 अप्रैल 2021, 21:45
2
इसके अलावा वह डुप्ली केवल bash -c के बारे में बात करता है लेकिन ओपी awk के बारे में भी पूछ रहा है और वह डुप्ली यह नहीं बताता कि ओपी को आउटपुट में पूरी लाइन क्यों मिल रही है।
 – 
anubhava
15 अप्रैल 2021, 21:49

1 उत्तर

सबसे बढ़िया उत्तर

$4 शेल द्वारा खर्च किया जाता है क्योंकि आपके पास डबल कोटेड कमांड स्ट्रिंग है।

आप bash कमांड लाइन में -x जोड़कर ट्रेस आउटपुट की जांच कर सकते हैं:

bash -xc "echo 'this is a test' | awk '{print $4}'"
+ echo 'this is a test'
+ awk '{print }'
this is a test

चूंकि $4 एक खाली स्ट्रिंग तक फैलता है, यह प्रभावी रूप से awk '{print }' चलता है और इस प्रकार आउटपुट में पूरी लाइन मुद्रित होती है।

इसे ठीक करने के लिए, आपको इस विस्तार से बचने के लिए एस्केप्ड $ का उपयोग करना चाहिए:

bash -c "echo 'this is a test' | awk '{print \$4}'"
test
5
anubhava 15 अप्रैल 2021, 21:33