8

我正在评估某些变量是否与预期值匹配。变量由某个程序在内存中设置,其值可以通过自定义程序从 shell 访问。

我将 shell 命令的输出传送到 awk 以获取我想要的特定字段,然后我想通过 perl 运行它以查看它是否与预期值匹配。例如,

ysgrp autostart | awk -F\: '{print $1}' | perl -e 'print {"True"} else {print "False"} if /on/'

但是,我从 perl 收到关于“} else”附近编译错误的投诉。如何处理 perl 单行中的 if/then/else 逻辑?

4

4 回答 4

15

您不能else在后缀条件中使用条件。您可以像这样使用三元条件运算符:

perl -e 'print /on/ ? "True" : "False"'

或者使用这样的显式块:

perl -e 'if ( /on/ ) { print "True" } else { print "False" }'
于 2012-05-08T17:45:01.857 回答
3

这部分:

awk -F\: '{print $1}' | perl -e 'print {"True"} else {print "False"} if /on/'

可以在 perl 中处理(如果我没记错 awk):

perl -F/:/ -lane 'print $F[0] =~ /on/ ? "True" : "False"'

注意-n开关的使用,没有它你的 perl 单行器将无法工作。还要注意这个-l开关,它会在你的打印中添加一个换行符,这是我假设你想要的。否则,您的输出将类似于:

TrueTrueTrueFalseTrueFalse
于 2012-05-08T17:48:34.177 回答
1

一个没有,除非使用三元?:运算符;foo if bar语法不支持else

于 2012-05-08T17:43:14.703 回答
1

你可以这样做:

 ... | perl -ne 'print /on/ ? "True" : "False"'

但请不要!你最好这样做:

... | grep -qF on && echo True || echo False
于 2012-05-08T17:44:52.717 回答