%% Có nghĩa là gì trong một tên hàm?


11

Nhìn vào đầu ra của env, tôi nhận thấy cũng có chức năng sau.

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

Nội dung của tệp /usr/share/mc/mc-wrapper.sh như sau.

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

Các %%ký tự có nghĩa là gì trong tên chức năng? Họ có làm cho nó hàm được gọi trong các trường hợp cụ thể không, hoặc họ có cho phép tôi gọi nó khác với các hàm khác không?

Tôi đang sử dụng openSUSE 42.3, với phiên bản Bash 4.3.42 (1) -release (x86_64-suse-linux-gnu), nếu điều đó tạo ra sự khác biệt.

Câu trả lời:


15

Tên hàm được tạo bằng cách bashcập nhật như là một phản ứng với lỗ hổng shellshock .

Có một chức năng có tên mcđã được xuất khẩu và bashphiên bản của bạn đang đổi tên nó bằng cách thêm trước BASH_FUNC_và thay thế ()bằng %%.

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

Dưới đây là bashbản vá của Florian Weimer đã giới thiệu bản sửa lỗi này, ngày 25 tháng 9 năm 2014:

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

Lưu ý rằng một tên hàm có thể chứa hầu hết mọi ký tự bashgiống như tên lệnh nói chung (tức là tên tệp) vì vậy %%chắc chắn là hợp lệ ở đây.


3

Có vẻ như bash khá vui khi sử dụng% ký tự trong tên hàm:

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

trong khi đó, ví dụ dash không thích chúng:

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

Theo như tôi có thể nói, %% không có bất kỳ ý nghĩa đặc biệt nào trong tên hàm bash. Nó sẽ giống như sử dụng XX thay thế. Điều này bất chấp định nghĩa của một nametrong trang web:

   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.

Nhưng có một =dấu bằng ở đó sau %%! Mà gây ra sự phân công ở đó.
αғsнιη

2
Đó chỉ là cách envin định nghĩa hàm.
Wodin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.