VARIABLE = () {định nghĩa hàm} hoạt động như thế nào trong bash


7

CẢNH BÁO - câu hỏi này là về Bash trước dễ bị tổn thương, do đó nó đã được thay đổi.


Tôi đã thấy một cái gì đó như thế này trong ENV bash của tôi:

module=() {  eval `/usr/bin/modulecmd bash $*` }

Làm thế nào để xây dựng này làm việc? Đó là những gì được gọi là?

Tôi không hỏi về modulecmd, tôi đang hỏi về toàn bộ cấu trúc.


1
Bạn có chắc chắn đã tìm thấy nó trong cú pháp chính xác đó (đặc biệt là với =dấu hiệu)? Bởi vì đối với tôi, bash không thích nó. Tuy nhiên nếu không có =nó sẽ là một định nghĩa hàm.
celtschk

Vâng, đó là cách nó xuất hiện ... Có một số ví dụ khác về điều đó cũng. Vâng, tôi đã thử nó và gặp lỗi từ bash về nó, nhưng tôi có ví dụ về nó trong ENV của tôi.
mcede

Câu trả lời:


9

Nó thực sự là một chức năng được đặt tên module. Nó xuất hiện trong các biến môi trường khi bạn xuất một hàm.

$ test() { echo test; }
$ export -f test
$ env | sed -n '/test/{N;p}'
test=() {  echo test
}

Từ tài liệu bash - xuất khẩu :

xuất khẩu

 export [-fn] [-p] [name[=value]]

Đánh dấu mỗi tên được truyền cho các tiến trình con trong môi trường. Nếu tùy chọn -f được cung cấp, các tên tham chiếu đến các hàm shell ; mặt khác, các tên tham chiếu đến các biến shell. Tùy chọn -n có nghĩa là không còn đánh dấu mỗi tên để xuất. Nếu không có tên nào được cung cấp hoặc nếu tùy chọn -p được cung cấp, một danh sách các tên được xuất sẽ được hiển thị. Tùy chọn -p hiển thị đầu ra ở dạng có thể được sử dụng lại làm đầu vào. Nếu một tên biến được theo sau bởi = value, giá trị của biến được đặt thành giá trị.

Trạng thái trả về bằng 0 trừ khi được cung cấp tùy chọn không hợp lệ, một trong các tên không phải là tên biến shell hợp lệ hoặc -f được cung cấp với tên không phải là hàm shell.

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.