Perl 无法识别未初始化的输入文件$filename



我正在从bash脚本调用perl程序。当我从命令行标记它的参数时,这个 Perl 脚本有效,但是当我从 bash 脚本调用它时,它会给出错误。

以下是 bash 脚本的相关部分:

for ((i=1; i<=$z; i++))
do 
    if (($i%2 == 0)); then
         ~/Desktop/SNP_finder.pl `awk 'FNR == '$i <"${d}".fasta` `awk ...` "${d}".txt
    else
...

和 Perl 脚本:

local $, = "t";
my @read = split('', $ARGV[0]);
my @reference = split('', $ARGV[1]);
my $filename = $ARGV[2];
...
open(my $fh, '>>', $filename) or die;
print $fh "Reference ", "SNP ", "Locationn";
...

我可以从终端窗口运行SNP_finder.pl很好,但是当我将其管道传输到此 Bash 脚本时,它会Use of unitialized value $filename给我错误并声称$filename的值''

shell 正在执行单词拆分。如果您的 awk 脚本返回空,则 "${d}".txt 参数最终将变为 $ARGV[1]$ARGV[0] 。如果你的awk脚本返回一个包含空格的字符串,它最终会更靠后......

为了避免这种情况,你应该引用它们,就像这样:

"`awk ...`"

更好的是:

"$(awk ...)"

相关内容

最新更新