我正在尝试将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_ARGS , LDFLAGS的值将在空间处被拆分。
使用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 。