我在Windows下的(git-)bash中运行以下功能:
function config_get_container_values() {
local project_name=$1
local container_name=$2
#local container_name="gitea"
echo "###"
buildcmd="jq -r \".containers[]."
echo "$buildcmd"
buildcmd="${buildcmd}${container_name}"
echo "$buildcmd"
buildcmd="${buildcmd}foobar"
echo "$buildcmd"
echo "###"
}
此输出如下。但是,在使用变量扩展字符串之后,他开始覆盖$ buildcmd。我也用添加命令(= +)一行中的所有内容进行了尝试。每次都相同的结果。
###
jq -r ".containers[].
jq -r ".containers[].gitea
foobar".containers[].gitea
###
真正奇怪的是:当我启用local container_name="gitea"
行时,一切都按预期工作。输出是:
###
jq -r ".containers[].
jq -r ".containers[].gitea
jq -r ".containers[].giteafoobar
###
当我将其全部放入新闻文件中时,它也可以按预期工作。因此,我认为在调用此函数之前,数千行出现了问题。任何想法,这可能是此行为的原因吗?
问候
戴夫
如果使用此函数调用
config_get_container_values proj gitea
它产生“预期”输出。如果通过
调用config_get_container_values proj $'gitea\r'
它产生的输出看起来像第一个输出示例。 $'gitea\r'
扩展为包含'gitea'
和Carriage return(CR)字符的字符串。
此问题的一个可能原因是从具有Windows / DOS行尾(CR-LF)的文件中读取了容器名称(gitea
)。这样的问题很常见。请参阅Stack Overflow 'bash' Info page的“在询问有问题的代码之前”部分中的第一个问题(“检查脚本或数据是否具有DOS样式的行尾字符”)。
这不是应该建立命令的方式,DOS线的结尾放在一边。使用--arg
将名称作为变量传递到过滤器中。