2017-07-06 28 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」 –