2017-07-06 86 views
0

我想创建一个字符串,将查询保存/发送到另一个位置,该字符串包含不同的变量。以完全错误的顺序回显打印变量

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

见下面的代码:

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 
+0

tokenIDString的值是什么? –

+0

不好意思,刚才抄错行,现在固定的,应该tokenID –

+0

声明-p tokenID 输出---> “eclare - tokenID =” 29a6966f-fa0e-4f08-87eb-418722872d80 --- 46407 –

回答

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格式(如果您拥有它,则会执行此操作),或者删除脚本中的回车符。你可以这样做:

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

本 或代替TR,您可以用sed 'sed的-e's/\ r // g'' –

+1

@KipK不幸的是,这不是可移植的;有些版本的'sed'将'\ r'解释为回车,有些则不。 (我主要使用macOS,它使用FreeBSD中的'sed'实现,它不会解释它们,所以我对此非常敏感......) –

+0

啊,这很公平,我大量使用'sed'版本我的linux脚本在这里,因为它只能在我们的环境中运行。 –

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 

为什么你觉得有什么在这里呢? 此致敬礼Georg

+0

查看agentRegQuery。 应该是 “./opt/mule/bin/amc_setup -H 29a6966f-fa0e-4f08-87eb-418722872d80 --- 46407 asdasd” –