作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下两个命令:
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/
我是一名优秀的程序员,十分优秀!