将包含引号的bashvariables插入到命令中会将其打破

我正在尝试将docker命令的一些部分拆分成bashvariables。

我以前的工作很好:

DOCKER_ID=$(docker run -e CGO_ENABLED=true -e LDFLAGS='-extldflags "-static"' -v $pkgPath:/src ...etc) 

-e标志放入一个variables中并试图使用它:

 BUILDER_ARGS="-e CGO_ENABLED=true -e LDFLAGS='-extldflags \"-static\"'" DOCKER_ID=$(docker run $BUILDER_ARGS -v $pkgPath:/src ...etc) 

第二个版本给我错误:

 docker: Error parsing reference: "\"-static\"'" is not a valid repository/tag. 

这让我觉得我试图插入的variables正在被破坏。

问题是BUILDER_ARGS的值不会被重新解释,所以转义引号是从字面上得到的,而不执行它们通常引用所附string的函数。 不能转义引号也不行,因为在docker runexpression式中,在BUILDER_ARGSLDFLAGS的值将在空间处被拆分。

使用Bash数组应该可以解决这些问题:

 BUILDER_ARGS=(-e CGO_ENABLED=true -e LDFLAGS='-extldflags "-static"') DOCKER_ID=$(docker run "${BUILDER_ARGS[@]}" -v $pkgPath:/src ...etc) 

这将起作用,因为BUILDER_ARGS数组中的每个元素都将被保留并正确引用。 数组的最后一个值是LDFLAGS='-extldflags "-static"' ,就像整体一样,它在docker run保存得很好并按预期docker run