将变量设置为等于包含非命令字的命令输出

时间:2018-11-25 01:31:46

标签: bash arguments

我正在编写一个小脚本,在其中我要将变量的值设置为等于命令的输出。但是,有问题的命令是对带有命令行参数的另一个脚本的调用。在这种情况下,我像往常一样使用反引号,但是问题是计算机出现错误,试图将命令行参数解释为命令。

#!/bin/bash

filename="$1"

while read p; do
        echo "This is the gene we are looking at: ""$p"
        lookIn= `./findGeneIn "$p" burgdorferi afzelii garinii hermsii miyamotoi parkeri`
        echo "$lookIn"
        #grep "$p" "$lookIn""/""prokka_""$lookIn""/*.tsv" | awk '{print $1}' 
done < $filename

我正在尝试将变量lookIn设置为等于./findGeneIn "$p" burgdorferi afzelii garinii hermsii miyamotoi parkeri的输出,其中./findGeneIn是一个脚本,而burgdorferi,...,parkeri是命令行参数为./findGeneIn

问题是,我收到一条错误消息:“ burgdorferi:找不到命令”。因此,它试图将这些参数解释为命令。我如何才能做到这一点呢?

1 个答案:

答案 0 :(得分:3)

lookIn= `./findGeneIn "$p" burgdorferi afzelii garinii hermsii miyamotoi parkeri`
       ^

删除多余的空间。分配的等号周围不能有空格。

在此处有空格的情况下,Bash将行解析为var=value command,它将运行一个命令,其中$var临时设置为"value"。或者,在这种情况下,它会将反引号的结果解释为命令名称,并将lookIn=解释为空变量分配。