gpt4 book ai didi

perl - 如何将 $SHELL 变量传递给 perl 搜索和替换

转载 作者:行者123 更新时间:2023-12-01 12:45:00 25 4
gpt4 key购买 nike

我有以下两个命令:

value=`grep -o Logs\/.*txt\" textFILE`
perl -i -wpe's/" onclick="img=document\.getElementById\('\''img_1'\''\); img\.style\.display = \(img\.style\.display == '\''none'\'' \? '\''block'\'' : '\''none'\''\);return false"/$value/' textFILE

但是,我不断收到 Use of uninitialized value $value in concatenation (.) or string at -e line 1, <> line 56.错误。谁能告诉我我做错了什么。

最佳答案

举个例子:

$ value=$(uname -r)
$ perl -e 'print "$value"'

当我们运行 Perl 来执行这里的代码时,我们并没有将 shell 变量 $value 的内容发送给 Perl。我们正在发送文字字符串“$value”,然后 Perl 将尝试打印不存在的 Perl 变量 $value。

这里有两种方法可以纠正这个问题。

第一种方法是用双引号而不是单引号将您的 Perl 代码括起来,以便 $value 在发送到 Perl 时成为 shell 变量 $value 的内容,而不是文字字符串 '$value':

$ value=$(uname -r)
$ perl -e "print '$value'"
3.13.9-generic

然而,当使用这个方法时,如果你有 Perl 变量和这个 shell 变量,你将需要“转义”Perl 变量,否则你会得到这样的错误:

$ value=$(uname -r)
$ perl -e "$example = 'test'; print \"$value $example\";"
syntax error at -e line 1, near "="

使用\'s 可以纠正这个问题:

$ value=$(uname -r)
$ perl -e "\$example = 'test'; print \"$value \$example\";"
3.13.9-generic test

其次,您可以通过将“值”导出到环境,然后通过您的 Perl 程序 (http://perldoc.perl.org/Env.html) 中已有的 %ENV 哈希访问它来避免将单引号更改为双引号。例如:

$ export value=$(uname -r)
$ perl -e 'print "$ENV{value}\n"'
3.13.9-generic

请注意您的环境,以免意外覆盖某些需要的环境变量。使用非常适合您的工作的命名约定可以帮助:

$ export MYPROGRAMNAME_KERNEL_VERSION=$(uname -r)
$ perl -e 'print "$ENV{MYPROGRAMNAME_KERNEL_VERSION}\n"'
3.13.9-generic
大多数 Linux 系统上的

printenv 将向您显示当前建立的环境变量。您也可以只使用 Perl 检查 %ENV。

关于perl - 如何将 $SHELL 变量传递给 perl 搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23001835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com