मेरे पास एक बैश फ़ंक्शन है जिसका उपयोग निर्देशिका नामों को छोटा करने के लिए किया जाता है, एक तरीका "/home/USER" को "~" तक छोटा करना है। बैश संस्करण 4.2 के साथ यह अपेक्षित परिणाम उत्पन्न करता है, लेकिन जब संस्करण 4.4 परिणाम "/ home/USER" तक विस्तारित हो जाता है।
#!/usr/bin/env bash
function convertDirRelative()
{
local retVar="$1" dir
shift
dir="$*"
# [...]
dir="${dir//${HOME}/~}"
eval "$retVar=\"\$dir\""
}
output=""
convertDirRelative output $HOME/test
echo "${BASH_VERSION}: Output: $output"
जब बैश 4.2 के साथ निष्पादित किया जाता है तो यह परिणाम होता है, जिसकी अपेक्षा की जाती है:
4.2.46(2)-release: Output: ~/test
बैश 4.4 के साथ निष्पादित होने पर यह परिणाम होता है:
4.4.19(1)-release: Output: /home/USER/test
मैं फ़ंक्शन कैसे लिख सकता हूं ताकि यह बैश 4.2 और 4.4 दोनों में अपेक्षित परिणाम उत्पन्न करे?
1 उत्तर
यह लाइन दोनों संस्करणों में काम करती प्रतीत होती है:
dir=${dir//${HOME}/\~}
संबंधित सवाल
नए सवाल
bash
बैश कमांड शेल के लिए लिखी गई लिपियों के बारे में प्रश्नों के लिए। त्रुटियों / वाक्यविन्यास त्रुटियों के साथ शेल स्क्रिप्ट के लिए, कृपया यहां पोस्ट करने से पहले शेलचेक प्रोग्राम (या वेब शेलचेक सर्वर पर https://shellcheck.net) के साथ उन्हें जांचें। बैश के इंटरैक्टिव उपयोग के बारे में सवाल स्टैक ओवरफ्लो की तुलना में सुपर उपयोगकर्ता पर ऑन-टॉपिक होने की अधिक संभावना है।
a=ab; echo "${a/b/~}"
a/home/oguz
प्रिंट करता है।