फ़ंक्शन नाम में %% का क्या अर्थ है?


11

के आउटपुट को देखते हुए env, मैंने देखा कि निम्नलिखित फ़ंक्शन भी है।

BASH_FUNC_mc%%=() {  . /usr/share/mc/mc-wrapper.sh
}

/Usr/share/mc/mc-wrapper.sh फ़ाइल की सामग्री निम्नलिखित है।

MC_USER=`id | sed 's/[^(]*(//;s/).*//'`
MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"

if test -r "$MC_PWD_FILE"; then
        MC_PWD="`cat "$MC_PWD_FILE"`"
        if test -n "$MC_PWD" && test -d "$MC_PWD"; then
                cd "$MC_PWD"
        fi
        unset MC_PWD
fi

rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE

%%फ़ंक्शन नाम में वर्णों का क्या अर्थ है? क्या वे इसे विशिष्ट मामलों में लागू किया गया कार्य करते हैं, या क्या वे मुझे अन्य कार्यों से अलग तरीके से बुलाने की अनुमति देते हैं?

मैं बैश संस्करण 4.3.42 (1) -release (x86_64-suse-linux-gnu) के साथ OpenSUSE 42.3 का उपयोग कर रहा हूं, अगर इससे कोई फर्क पड़ता है।

जवाबों:


15

फ़ंक्शन नाम को शेलशॉक भेद्यता की bashप्रतिक्रिया के रूप में अपडेट करके तैयार किया गया था ।

एक फ़ंक्शन था जिसका नाम mcनिर्यात किया गया था और आपका bashसंस्करण इसका नाम बदलकर BASH_FUNC_और बदलकर बदल रहा ()है %%

$ d() { date ; }
$ export -f d
$ env | grep %%
BASH_FUNC_d%% { date

यहाँ bashफ्लोरियन वीमर द्वारा पैच दिया गया है, जिसने इस फिक्स को पेश किया, दिनांक 25 सितंबर 2014:

http://seclists.org/oss-sec/2014/q3/att-693/variables-affix.patch

ध्यान दें कि एक फ़ंक्शन नाम में लगभग सभी वर्ण शामिल हो सकते हैं bashजैसे सामान्य रूप में एक कमांड नाम (यानी एक फ़ाइल नाम) तो %%निश्चित रूप से यहां मान्य है।


3

ऐसा लगता है कि फ़ंक्शन नामों में% वर्णों का उपयोग करने के लिए बैश काफी खुश है:

bash$ TEST%%() { echo test; }
bash$ TEST%%
test

जबकि डैश उन्हें पसंद नहीं है:

$ TEST%%() { echo test; }
dash: 1: Syntax error: Bad function name

जहाँ तक मैं बता सकता हूँ, %% का किसी bash फ़ंक्शन नाम में कोई विशेष अर्थ नहीं है। यह बदले में XX का उपयोग करने जैसा होगा। यह nameमैनपेज में परिभाषा के बावजूद है :

   name   A word consisting only of  alphanumeric  characters  and  under-
          scores,  and beginning with an alphabetic character or an under-
          score.  Also referred to as an identifier.

लेकिन वहाँ के =बाद एक बराबर संकेत है %%! जो वहां असाइनमेंट का कारण बनता है।
α atsнιη

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