bash - 如何从bash脚本调用perl sub获取返回值?
问题描述
我正在从 bash 脚本调用 perl 脚本。我想获取 perl 脚本在 bash 脚本中返回的返回值,以便对其进行操作。当我有以下内容时,当我期望它是“好”时,输出是控制台的空白行。
bashThing.sh
#!/bin/bash
ARG="valid"
VAL=$(perl -I. -MperlThing -e "perlThing::isValid ${ARG}")
echo $VAL
perlThing.pm
#! /usr/bin/perl -w
use strict;
package perlThing;
sub isValid
{
my $arg = shift;
if($arg == "valid")
{
return "good";
}
else
{
return "bad";
}
}
1;
解决方案
您没有完全warnings
启用 Perl。你会看到几个警告。我在 bash (-w
在 Perl 单行程序上使用)和 Perl 中都启用了警告use warnings;
。shebang 行在.pm
文件中被忽略,因为它没有作为脚本执行。
isValid
返回一个字符串,但您忽略了返回值。要解决这个问题,print
请在单线中使用。
您还需要isValid
正确传递值。
最后,您需要使用eq
而不是==
进行字符串比较。
重击:
#!/bin/bash
ARG="valid"
VAL=$(perl -w -I. -MperlThing -e "print perlThing::isValid(q(${ARG}))")
echo $VAL
珀尔:
use strict;
use warnings;
package perlThing;
sub isValid
{
my $arg = shift;
if($arg eq "valid")
{
return "good";
}
else
{
return "bad";
}
}
1;
推荐阅读
- typescript - 根据承诺的结果在量角器中创建动态它
- ios - async function run() { ^^^^^^^^ SyntaxError: Unexpected token function
- sql-server - 为什么在 SQL Server 中违反 PRIMARY KEY 约束返回错误代码 2627 而不是 2601?
- django - Django:如何让 setUpTestData 为所有测试运行一次?
- angular - 如何更改 *ngFor 中的单个 mouseover 和 mouseout 事件?
- powershell - 如何使用 PowerShell 将字符替换为 $_
- javascript - 揭示模块模式结合 ES6 模块
- java - 来自外键列的 JDBC getString()
- python - 如何将大型数据集从 csv 读取到数据框中?
- sql-server - 根据 SSMS 中的时间戳检索前一行