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

时间:2017-04-12 18:59:00

标签: perl shell

我从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 ", "Location\n";
...

我可以在终端窗口中运行SNP_finder.pl,但是当我将其传输到此Bash脚本时,它会向我显示错误Use of unitialized value $filename并声明$filename的值为{{1} }。

1 个答案:

答案 0 :(得分:3)

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

为了避免这种情况,你应该引用它们,如下所示:

"`awk ...`"

更好的是:

"$(awk ...)"