चर में दो बार चर कैसे दोहराएं


22

मैं इस उदाहरण में परीक्षण को प्रतिध्वनित करने के लिए दूसरी प्रतिध्वनि कैसे बना सकता हूं:

 echo test  | xargs -I {} echo {} && echo {}
xargs 

var=test & echo $var ...
एलेक्सस

xargs -I {} var = {} echo $ var && echo $ var जो आपको देगा: ऐसी कोई फ़ाइल या निर्देशिका नहीं।

जवाबों:


29

बस {}दो बार अपनी आज्ञा में लिखिए । निम्नलिखित काम करेगा:

$ echo test | xargs -I {} echo {} {}
test test

आपकी समस्या यह है कि कमांड्स नेस्टेड कैसे हैं । इसे देखें:

echo test | xargs -I {} echo {} && echo {}

मारपीट को अंजाम देंगे echo test | xargs -I {} echo {}। यदि यह सफलतापूर्वक चलता है, echo {}तो निष्पादित किया जाता है। नेस्टिंग को बदलने के लिए, आप कुछ इस तरह से कर सकते हैं:

echo test | xargs -I {} sh -c "echo {} && echo {}"

हालांकि, आपको परेशानी हो सकती है क्योंकि दृष्टिकोण कोड इंजेक्शन के लिए प्रवण हो सकता है। जब "परीक्षण" को शेल कोड के साथ प्रतिस्थापित किया जाता है, तो इसे निष्पादित किया जाता है। इसलिए, आपको संभवतः नेस्टेड शेल को तर्कों के साथ इनपुट पास करना चाहिए।

echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}

3
ध्यान दें कि यदि आपके पास कॉलॉडिक है, तो शाब्दिक रूप से आपको अपने अंतिम कोड में अप्रत्याशित परिणाम प्राप्त होंगे $(rm -f *)। यह करने के लिए बेहतर हैxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Kusalananda

@ कुसलानंद, धन्यवाद। मैं समस्या से अवगत था लेकिन मैं उस समय एक सरल समाधान के बारे में नहीं सोच सकता था। मैंने आपके सुझाव को उत्तर में एकीकृत कर दिया।
जोजोतएक्सजीएमई

5

एक अन्य विकल्प -iध्वज का उपयोग करना है , जो कि जैसा है -I{}(इसका अर्थ है कि प्रतिस्थापन के साथ दिया गया है {}):

$ echo test | xargs -i echo {} {}

1
इस बीच: This option is deprecated; use -I instead.मैनुअल में जोड़ा गया है man xargs
जोनाथन कोमार

0

मेरे लिए केवल निचला मामला काम करता है। मेरे पास एक निर्देशिका में सैकड़ों छवियां थीं और उन्हें एक सूची में स्रोत प्राप्त करना चाहते थे। ऊपरी मामला i -Iविकल्प ने मेरे लिए काम नहीं किया। केवल निचला मामला। शायद संस्करण अंतर के कारण। इन छवियों में सभी के नाम थे Daniel_(somenumber).jpg

इस सिंटैक्स ने काम किया है:

ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"

यह दिखाता है:

src='Daniel_248.jpg' alt='Daniel_248.jpg'
...

Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / लिनक्स


2
मैंने इसे अधिक पठनीय बनाने के लिए आपके उत्तर में कुछ स्वरूपण जोड़ा। मुझे उम्मीद है कि मैंने इसे सही ढंग से समझा है।
फ्रा-सान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.