एक सबशेल या फ़ंक्शन के आउटपुट को बदलने के लिए बैश बिलिन का उपयोग कैसे करें


9

मैं एक सबशेल या अन्य बैश फ़ंक्शन के आउटपुट को बदलने के लिए अंतर्निहित बैश सबस्ट्रिंग का उपयोग करने का प्रयास कर रहा हूं।

निम्नलिखित आदेश zsh में काफी अच्छी तरह से काम करता है; लेकिन bad substitutionबश में एक त्रुटि के परिणामस्वरूप :

${${PWD##*/}//trunk/latest}

या

${$(basename $PWD)//trunk/latest}

आउटपुट का अंतिम फ़ोल्डर होना चाहिए $PWD, latestमेरी वर्तमान निर्देशिका द्वारा प्रतिस्थापित किया गया हैtrunk

तो /home/user/trunkबनना चाहिएlatest

क्या चर या पाइप पर भरोसा किए बिना श्रृंखला स्ट्रिंग्स के संस्करणों के लिए एक बैश बराबर है? या बैश बिल्ट-इन केवल इनपुट को एक स्ट्रिंग या एक सादे चर की अनुमति देता है?

जवाबों:


9

नहीं, प्रतिस्थापन ऑपरेटरों के घोंसले के शिकार के लिए अद्वितीय है zsh

ध्यान दें कि साथ की zshतरह (t)csh, आप भी कर सकते हैं ${PWD:t:s/trunk/latest/}

हालाँकि, bashवे इतिहास विस्तार के लिए उन csh इतिहास संशोधकों का भी समर्थन करते हैं, लेकिन यह उनके पैरामीटर विस्तार के लिए उनका समर्थन नहीं करता है।

यहां bash, एक अस्थायी चर का उपयोग करें:

var=${PWD##*/} var=${var//trunk/latest}

3

इसे दंश के साथ आज़माएं:

[[ $PWD =~ .*/(.*) ]] && echo "${BASH_REMATCH[1]//trunk/latest}"

या एक आदेश के साथ:

[[ $PWD =~ .*/(.*) && ${BASH_REMATCH[1]//trunk/latest} =~ (.*) ]]

परिणाम में है ${BASH_REMATCH[1]}


0

क्या तुम चाहते हो...?

PWD=latest

मुझे आपके अनुरोध का कोई तरीका नहीं दिखाई दे रहा है। यदि आप $PWDw / लेटेस्ट के सभी को बदलना चाहते हैं - हालांकि ऐसा करने का सबसे अच्छा तरीका cdनवीनतम है।

[ /home/user/trunk = "$PWD" ] && OLDPWD=../latest cd -

... जो आपको नवीनतम और पथनाम प्रिंट करने के लिए stdout में ले जाएगा। आप वहीं वापस आ सकते हैं जहां आप cd -फिर से काम करके आए थे । आप एक ही w / कर सकते हैं $CDPATH:

mkdir -p /tmp/{1..5}  ; \
CDPATH=/tmp cd 3; cd -; \
echo "${CDPATH:-empty or unset::}" "$OLDPWD"

/tmp/3
/home/mikeserv
empty or unset:: /tmp/3

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