%% หมายถึงอะไรในชื่อฟังก์ชัน


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

สิ่งที่ทำ%%อักขระหมายถึงในชื่อฟังก์ชัน? พวกเขาทำให้มันเป็นฟังก์ชั่นที่เรียกใช้ในกรณีที่เฉพาะเจาะจงหรือพวกเขาอนุญาตให้ฉันเรียกมันแตกต่างจากฟังก์ชั่นอื่น ๆ ?

ฉันใช้ openSUSE 42.3 พร้อม Bash รุ่น 4.3.42 (1) - ปล่อย (x86_64-suse-linux-gnu) ถ้านั่นสร้างความแตกต่าง

คำตอบ:


15

ชื่อฟังก์ชั่นถูกสร้างขึ้นโดยมีbashการปรับปรุงเพื่อตอบสนองต่อความอ่อนแอของshellshock

มีฟังก์ชั่นเป็นชื่อmcที่ได้รับการส่งออกของคุณและbashรุ่นที่ถูกเปลี่ยนชื่อใหม่โดย prepending BASH_FUNC_และแทนที่โดย()%%

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

นี่คือbashแพทช์ของ Florian Weimer ที่แนะนำการแก้ไขนี้ลงวันที่ 25 กันยายน 2014:

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

โปรดทราบว่าชื่อฟังก์ชั่นสามารถมีอักขระได้เกือบทุกตัวในลักษณะbashเดียวกับชื่อคำสั่งทั่วไป (เช่นชื่อไฟล์) ดังนั้นจึง%%ใช้ได้อย่างแน่นอน


3

ดูเหมือนว่า bash ยินดีที่จะใช้% อักขระในชื่อฟังก์ชัน:

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

ในขณะที่เช่นรีบไม่ชอบพวกเขา:

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

ดังนั้นเท่าที่ฉันสามารถบอกได้ %% ไม่มีความหมายพิเศษในชื่อฟังก์ชันทุบตี มันจะเหมือนกับการใช้ XX แทน นี่คือคำจำกัดความของแม้nameใน manpage:

   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.

แต่=หลังจากนั้นก็มีเครื่องหมายเท่ากับ%%! ซึ่งทำให้เกิดการมอบหมายที่นั่น
αғsнιη

2
นั่นเป็นเพียงวิธีenvพิมพ์คำนิยามฟังก์ชัน
Wodin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.