假设您的 zsh 配置包含以下 Perl 行:
PATH="/path/to/your/home/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/path/to/your/home/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/path/to/your/home/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/path/to/your/home/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/path/to/your/home/perl5"; export PERL_MM_OPT;
zsh 配置文件不是脚本,所以如果我理解正确的话,不可能在那里使用常规的 bash 样式变量。
但也许仍然有可能以某种方式为该/path/to/your/home/perl5/
部分设置一个变量,以便更容易地更改所有五条线?
不确定在以下
~/.zshrc
情况下您如何能得出这不是一个脚本(shell 语言中的代码)或者不能进行变量赋值的结论(也不确定为什么您会认为 bash 与 zsh 有任何关联):显然是 shell 代码,并且在代码之上设置变量(并将它们导出到环境中)。
是的,
~/.zshrc
这是一个脚本,代码应使用 zsh 语言编写,zsh 的交互式调用在启动时对其进行解释。它通常用于定义别名、函数、ztyles、设置选项和变量等以自定义交互式 shell,而是一个由 zsh 的登录~/.zprofile
调用解释的脚本,用于自定义登录会话,您通常会在其中设置将在整个会话中继承的环境变量。上述代码(由 生成
cpan
)采用与所有 Bourne 类 shell 兼容的语法编写。您会注意到它使用的var=value; export var
是 而export var=value
不是 Korn 语法(POSIX 也为 指定了sh
),但在 Bourne shell 中不起作用,也不在var=value export var
Bourne、Korn 和 POSIX 中起作用,但在现代版本的 zsh 中不起作用,除非在 sh 或 ksh 仿真中。它甚至有尾随的
;
s,除非将这 5 行连接在一起,否则这是不需要的,当人们忘记 和 中的引号eval "$(code-that-outputs-those-lines)"
以及默认值时就会发生这种情况$IFS
。因此,是的,您可以定义一个 shell 变量来分解一些代码,例如:
(仍然与 Bourne/Korn/POSIX/zsh 兼容)
您甚至可以使代码特定于 zsh,并使用匿名函数将
$perl_install_base
其设为本地,以免使用这些变量污染环境,这些变量在设置这些 perl 变量后将不再需要,并使用$path
绑定到 zsh 的数组$PATH
并以类似的方式使其他绑定变量: