以完全错误的顺序回显打印变量

时间:2017-07-06 09:33:23

标签: bash docker

我正在尝试创建一个带有查询的字符串,该查询将保存/发送到另一个位置,此字符串包含不同的变量。

我遇到的问题是变量的回声是完全颠倒和混合的。

见下面的代码:

tokenID=$(docker exec -ti $dockerContainerID /bin/sh -c "cat /tempdir/tokenfile.txt")
serverName="asdasd"
attQuery="$tokenID $serverName"
agentRegQuery="$./opt/mule/bin/amc_setup -H $attQuery"

echo TOKEN ID $tokenID
echo SERVER NAME $serverName
echo $attQuery
echo $agentRegQuery

在下面找到我收到的输出:

TOKEN ID 29a6966f-fa0e-4f08-87eb-418722872d80---46407
SERVER NAME asdasd
 asdasdf-fa0e-4f08-87eb-418722872d80---46407
 asdasdmule/bin/amc_setup -H 29a6966f-fa0e-4f08-87eb-418722872d80---46407

2 个答案:

答案 0 :(得分:1)

tokenID变量末尾有一个回车符,可能是因为/tempdir/tokenfile.txt是DOS / Windows格式(行以回车+换行结束),而不是unix(行以只是换行)。当您单独打印tokenID时,它看起来没问题,但是如果您在同一行上打印其他内容后,它会覆盖该行的第一部分。因此,当您打印$attQuery时,它会打印出来:

29a6966f-fa0e-4f08-87eb-418722872d80---46407[carriage return]
 asdasd

...但第二行打印在第一行的顶部,所以它出现为:

 asdasdf-fa0e-4f08-87eb-418722872d80---46407

解决方案是将文件转换为unix格式(如果你有的话,dos2unix将执行此操作),或者删除脚本中的回车符。你可以这样做:

tokenID=$(docker exec -ti $dockerContainerID /bin/sh -c "cat /tempdir/tokenfile.txt" | tr -d '\r')

答案 1 :(得分:0)

我认为一切正常,

echo TOKEN ID $tokenID             -> TOKEN ID 29a6966f-fa0e-4f08-87eb-418722872d80---46407
echo SERVER NAME $serverName       -> SERVER NAME asdasd
echo $attQuery                     -> asdasdf-fa0e-4f08-87eb-418722872d80---46407
echo $agentRegQuery                -> asdasdmule/bin/amc_setup -H 29a6966f-fa0e-4f08-87eb-418722872d80---46407

为什么你觉得这里有什么东西? 最好的问候,格奥尔格