我正在从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 ...)"