在bash中,我可以设置一个环境变量,只在第一次访问时执行命令吗?
In bash, can I set an environment variable that executes a command only the first time it's accessed?
基本上我想做类似
的事情
export PWD=$(run pwd the first time this environment variable is accessed,
store the value,
reuse that value for each subsequent access)
如果它是 shell 特定的,请尝试将其放入 .bashrc;
,如果不是,请将其放入 .profile
。还要确保将 [[ $- != *i* ]] && return
放在 .bashrc
的顶部。如果你能说出你想怎么用就更清楚了。
我带你去问一个变量,它的值是通过第一次执行命令来确定的 read,然后缓存该值以供后续读取。
不,你不能那样做。变量的值仅在分配时建立,而不是在读取时建立。您可以使用 shell 函数(和支持变量)做类似的事情,但是:
my_pwd() {
if [[ -z "$_saved_pwd" ]]; then
export _saved_pwd=$(pwd)
fi
echo "${_saved_pwd}"
}
export -f my_pwd
有了它,my_pwd
命令将执行 pwd
并在第一次运行时存储结果。每次运行时,它都会输出第一个 pwd
命令的结果。这可能直接满足您的目的,或者您也可以通过 $(my_pwd)
.
捕获结果用于其他用途
基本上我想做类似
的事情export PWD=$(run pwd the first time this environment variable is accessed,
store the value,
reuse that value for each subsequent access)
如果它是 shell 特定的,请尝试将其放入 .bashrc;
,如果不是,请将其放入 .profile
。还要确保将 [[ $- != *i* ]] && return
放在 .bashrc
的顶部。如果你能说出你想怎么用就更清楚了。
我带你去问一个变量,它的值是通过第一次执行命令来确定的 read,然后缓存该值以供后续读取。
不,你不能那样做。变量的值仅在分配时建立,而不是在读取时建立。您可以使用 shell 函数(和支持变量)做类似的事情,但是:
my_pwd() {
if [[ -z "$_saved_pwd" ]]; then
export _saved_pwd=$(pwd)
fi
echo "${_saved_pwd}"
}
export -f my_pwd
有了它,my_pwd
命令将执行 pwd
并在第一次运行时存储结果。每次运行时,它都会输出第一个 pwd
命令的结果。这可能直接满足您的目的,或者您也可以通过 $(my_pwd)
.