Bạn có thể sử dụng hàm ẩn danh để cung cấp phạm vi cho biến. Từ man zshall
:
ANONYMOUS FUNCTIONS
If no name is given for a function, it is `anonymous' and is handled
specially. Either form of function definition may be used: a `()' with
no preceding name, or a `function' with an immediately following open
brace. The function is executed immediately at the point of definition
and is not stored for future use. The function name is set to
`(anon)'.
Arguments to the function may be specified as words following the clos‐
ing brace defining the function, hence if there are none no arguments
(other than $0) are set. This is a difference from the way other func‐
tions are parsed: normal function definitions may be followed by cer‐
tain keywords such as `else' or `fi', which will be treated as argu‐
ments to anonymous functions, so that a newline or semicolon is needed
to force keyword interpretation.
Note also that the argument list of any enclosing script or function is
hidden (as would be the case for any other function called at this
point).
Redirections may be applied to the anonymous function in the same man‐
ner as to a current-shell structure enclosed in braces. The main use
of anonymous functions is to provide a scope for local variables. This
is particularly convenient in start-up files as these do not provide
their own local variable scope.
For example,
variable=outside
function {
local variable=inside
print "I am $variable with arguments $*"
} this and that
print "I am $variable"
outputs the following:
I am inside with arguments this and that
I am outside
Note that function definitions with arguments that expand to nothing,
for example `name=; function $name { ... }', are not treated as anony‐
mous functions. Instead, they are treated as normal function defini‐
tions where the definition is silently discarded.
Nhưng ngoài việc đó - nếu bạn không sử dụng export
trong của bạn .zshrc
ở tất cả, biến chỉ nên được hiển thị trong phiên tương tác hiện tại của bạn, và nó không nên được xuất khẩu sang subshells.
Như terdon giải thích trong bình luận của ông: export -n
trong bash
chỉ làm cho "xuất khẩu" bất động sản phải được loại bỏ từ biến, vì vậy sử dụng export -n GREP_OPTIONS=--color=always
là tương đương với không sử dụng xuất khẩu ở tất cả - GREP_OPTIONS=--color=always
.
Nói cách khác, để có được hành vi mong muốn, chỉ cần không sử dụng export
. Thay vào đó, trong bạn .zshrc
, bạn nên có
GREP_OPTIONS=--color=always
Điều đó sẽ làm cho biến có sẵn cho tất cả các shell (tương tác, không đăng nhập) mà bạn chạy, giống như bạn muốn, nhưng nó sẽ không được xuất sang shell con.
export -n
chỉ cần xuất khẩu một biến xuất khẩu.