重击,当我尝试将其覆盖到字符串时

问题描述 投票:1回答:2

我在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
###

当我将其全部放入新闻文件中时,它也可以按预期工作。因此,我认为在调用此函数之前,数千行出现了问题。任何想法,这可能是此行为的原因吗?

问候

戴夫

string bash concatenation concat git-bash
2个回答
0
投票

如果使用此函数调用

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样式的行尾字符”)。


0
投票

这不是应该建立命令的方式,DOS线的结尾放在一边。使用--arg将名称作为变量传递到过滤器中。

© www.soinside.com 2019 - 2024. All rights reserved.