Shell-Script

zsh 中的局部變數:zsh 中 bash 的“export -n”相當於什麼

  • January 28, 2014

我試圖在 zsh 中包含一個 shell 的變數範圍,而不是讓孩子看到它。例如,我在 .zshrc 中鍵入:

GREP_OPTIONS=--color=always

但是,如果我使用以下內容執行 shell 腳本:

#!/bin/bash
echo $GREP_OPTIONS

輸出是:

--color=always

雖然我希望它為空(上面的 shell 腳本根本不應該看到 GREP_OPTIONS 變數)。

在 bash 中,可以說: export -n GREP_OPTIONS=--color=always,這將防止這種情況發生。如何在 zsh 中完成此操作?

export在 zsh 中是 的簡寫typeset -gx,其中屬性g表示“全域”(相對於函式的局部),屬性x表示“導出”(即在環境中)。因此:

typeset +x GREP_OPTIONS

這也適用於 ksh 和 bash。

如果您GREP_OPTIONS一開始就從不導出,則不需要取消導出它。

您還可以使用間接的可移植方式:取消設置變數會取消導出它。在 ksh/bash/zsh 中,如果變數是只讀的,這將不起作用。

tmp=$GREP_OPTIONS
unset GREP_OPTIONS
GREP_OPTIONS=$tmp

引用自:https://unix.stackexchange.com/questions/111225