मेरे पास एक बैश फ़ंक्शन है जिसका उपयोग निर्देशिका नामों को छोटा करने के लिए किया जाता है, एक तरीका "/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
Tobias Fendin 12 जिंदा 2021, 19:02
हां, यह बैश 4.3 (प्रासंगिक चर्चा के साथ बदल गया। ए>)। लेकिन मुझे नहीं लगता कि वर्तमान व्यवहार सही है, इसका कोई मतलब नहीं है कि a=ab; echo "${a/b/~}" a/home/oguz प्रिंट करता है।
 – 
oguz ismail
12 जिंदा 2021, 20:53

1 उत्तर

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

यह लाइन दोनों संस्करणों में काम करती प्रतीत होती है:

dir=${dir//${HOME}/\~}
1
choroba 12 जिंदा 2021, 19:10
धन्यवाद! क्या उद्धरण चिह्न अतिरिक्त विस्तार का कारण बनते हैं?
 – 
Tobias Fendin
12 जिंदा 2021, 19:21
मुझे नहीं पता, मैंने अभी कई चीजों की कोशिश की और यह काम किया :-) असाइनमेंट में आमतौर पर डबल कोट्स की आवश्यकता नहीं होती है।
 – 
choroba
12 जिंदा 2021, 20:18