我从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} }。
答案 0 :(得分:3)
shell正在执行分词。如果您的awk脚本返回为空,则"${d}".txt
参数将最终为$ARGV[1]
或$ARGV[0]
。如果您的awk脚本返回一个包含空格的字符串,它将会进一步向下...
为了避免这种情况,你应该引用它们,如下所示:
"`awk ...`"
更好的是:
"$(awk ...)"