我正在评估某些变量是否与预期值匹配。变量由某个程序在内存中设置,其值可以通过自定义程序从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逻辑?
答案 0 :(得分:13)
您不能在后缀条件中使用else
条件。您可以使用这样的三元条件运算符:
perl -e 'print /on/ ? "True" : "False"'
或者使用这样的显式块:
perl -e 'if ( /on/ ) { print "True" } else { print "False" }'
答案 1 :(得分: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 one-liner将无效。另请注意-l
开关,它会为您的打印添加换行符,这是我认为您想要的。否则你的输出将是:
TrueTrueTrueFalseTrueFalse
答案 2 :(得分:1)
除非使用三元?:
运算符,否则不会; foo if bar
语法不支持else
。
答案 3 :(得分:1)
你可以这样做:
... | perl -ne 'print /on/ ? "True" : "False"'
但请不要!你最好这样做:
... | grep -qF on && echo True || echo False