दोनों सिंगल और डबल कोट्स के साथ बैश अलियास कमांड


85

मेरे पास यह कमांड है जो मैं चाहता हूं लेकिन मैं इसे अपने .bashrc में नोट नहीं कर सकता (ध्यान दें कि यह एकल और दोहरे उद्धरण दोनों का उपयोग करता है):

svn status | awk '$1 =="M"{print $2;}'

मैंने कोशिश की:

alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"

और कुछ अन्य सामान्य ज्ञान संयोजन बिना किसी भाग्य के .. मुझे पता है कि बैश बहुत उद्धरण के साथ है .. तो इसे उर्फ ​​करने का सही तरीका क्या है और क्यों? धन्यवाद

जवाबों:


114

आपको बस इसे सही ढंग से भागने की जरूरत है।

alias xxx="svn status | awk '\$1 ==\"M\"{print \$2;}'"

16
तो मैं $ बच नहीं रहा था .. पता नहीं था!
प्रागैमाटिक_प्रोग्रामर

7
अच्छा लगा! मुझे नहीं पता था कि मुझे '$' बचना था!
Shadoninja

1
अच्छा जवाब लेकिन यह भी याद दिलाना कि गलती करना कितना आसान है। मामले में मैं संभाल रहा था पहले से ही बच गए पात्रों और यह एक बड़ी गड़बड़ बना दिया था। नीचे EJK का उत्तर मेरे लिए अधिक उपयोगी था, एक फ़ंक्शन शायद कई के लिए एक क्लीनर विकल्प है :)
jerclarke

1
@jeremyclarke मैं असहमत नहीं हूं, बचना मुश्किल है, अगर आप कर सकते हैं तो इससे बचें।
ffledgling

क्या `भागने की जरूरत है?
एरोन फ्रेंके

92

यहाँ कुछ ऐसा है जो एक ही चीज़ को बिना किसी अन्य चीज़ के उपयोग के पूरा करता है। इसे अपने .bashrc में एक फ़ंक्शन में रखें:

xx() {
    svn status | awk '$1 =="M"{print $2;}'
}

इस तरह आपको उद्धरण सही होने के बारे में चिंता करने की ज़रूरत नहीं है। यह ठीक उसी वाक्यविन्यास का उपयोग करता है जो आप कमांड लाइन पर करेंगे।


13
+1, लेकिन एक वक्रोक्ति - functionकीवर्ड POSIX के साथ एक अनावश्यक असंगति है। बस इसे छोड़ दो:xx() { ...
चार्ल्स डफी

6
मैं नहीं जानता था कि। धन्यवाद।
EJK

3
यह सरल है और मुझे यह पसंद है, लेकिन दूसरे ने इस सवाल का अधिक सटीक उत्तर दिया ..
pragmatic_programmer

14
@pragmatic_programmer यह एक निष्पक्ष व्याख्या है। व्यक्तिगत रूप से, मैं अभी भी मानता हूं कि यह उत्तर एक शाब्दिक अर्थ में उत्तरदायी नहीं होने के बावजूद बेहतर है - कम से कम 50% समय पर हमें irc.freenode.org के उपनामों के बारे में प्रश्न मिलते हैं #bash, इसका उत्तर "इसके बजाय एक फ़ंक्शन का उपयोग करें" है। ; उपनाम कुछ भी नहीं कर सकते हैं, लेकिन उपसर्ग विस्तार, जो उपयोगी नहीं है यदि आप चाहते हैं, उदाहरण के लिए, तर्कों पर शाखा।
चार्ल्स डफी

9
ऐसे समय होते हैं जब सटीक प्रश्न का एक शाब्दिक उत्तर बहुत अधिक पसंद किया जाता है, लेकिन अधिकांश समय, इस तरह का उत्तर अधिक उपयोगी होता है क्योंकि यह 1) प्रारंभिक समस्या को हल करने के लिए आसान तरीके से हल करता है और 2) उनके लौकिक टूलबेल के लिए एक नया उपकरण पूछनेवाला।
टेकब्रैट

3

बश 2.04 के बाद से एक फ़ंक्शन का उपयोग करने या @ffledgling किया था जिस तरह से बचने के बगल में एक तीसरा (आसान) तरीका है: स्ट्रिंग शाब्दिक सिंटैक्स का उपयोग करना ( यहां एक उत्कृष्ट उत्तर है )।

उदाहरण के लिए यदि आप इस ऑनलाइनर का एक उपनाम बनाना चाहते हैं तो यह समाप्त हो जाएगा:

alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'

तो आपको बस $स्ट्रिंग के सामने जोड़ना होगा और सिंगल कोट्स से बचना होगा।

यह लाता चेतावनी एक shellcheck आप शायद सुरक्षित रूप से अक्षम कर सकता है के साथ# shellcheck disable=SC2139

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.