如何评估字符串中的shell变量?

Fab*_*ian 7 perl

在我的Perl脚本中,我获得了可能包含环境变量的文件路径字符串,例如$FONTS/test.ttf$TMP/file.txt.

我现在想要打开这样的文件:

open my $handle, "<$filename" or die $!;
Run Code Online (Sandbox Code Playgroud)

我现在如何在打开调用之前扩展环境变量,例如bash shell会做什么?

Eug*_*ash 13

如果设置了环境变量,则可以使用简单替换:

$filename =~ s/\$(\w+)/$ENV{$1}/g;
Run Code Online (Sandbox Code Playgroud)

  • 整洁简洁 - 而且,一如既往,错误处理会搞砸它.具体来说,如果未设置其中一个引用的环境变量,您最多会得到一个意外的路径; 您可能还会收到有关从Perl访问未定义变量的警告.虽然还有其他shell表示法(比如`$ {TMP}`),但它们很少用在会出现问题的上下文中. (2认同)