将变量连接到String bash脚本

时间:2018-02-21 20:26:06

标签: bash shell unix curl

我试图在我的bash脚本中使用字符串连接变量,变量是独立读取的,但每当我尝试连接它们时,它都无法识别变量值。 前 -

echo $CONFIG_PROTOCOL (Prints the variable value, HTTP) 

echo $CONFIG_PROTOCOL'://'$CONFIG_SERVER_SOURCE:$CONFIG_PORT'/api/creation/objects/export?collection.ids='$sf

带有URL的上述回显打印出/api/creations/objects/export?collection.ids=value_1,同时打印出http://localhost:8080/api/creation/objects/export?collection.ids=value_1

任何意见都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

这是因为$CONFIG_PORT有一个尾随回车符。这是一个MCVE

CONFIG_PROTOCOL="http"
CONFIG_SERVER_SOURCE="example.com"
CONFIG_PORT="8080"
sf="42"

# Introduce bug:
CONFIG_PORT+=$'\r'

echo $CONFIG_PROTOCOL'://'$CONFIG_SERVER_SOURCE:$CONFIG_PORT'/api/creation/objects/export?collection.ids='$sf

执行时,会打印:

/api/creation/objects/export?collection.ids=42

当您注释掉有缺陷的行时,您会得到:

http://example.com:8080/api/creation/objects/export?collection.ids=42

在这两种情况下,echo似乎都会显示正确的值,因为echo是一种向人类显示文字的工具,对于显示基础数据无用。 printf '%q\n' "$CONFIG_PORT"会以明确的格式显示它:

$ echo $CONFIG_PORT
8080

$ printf '%q\n' "$CONFIG_PORT"
$'8080\r'

解决此问题的最佳方法是确保正确提供值的任何内容。但最简单的方法就是剥离它们:

echo $CONFIG_PROTOCOL'://'$CONFIG_SERVER_SOURCE:$CONFIG_PORT'/api/creation/objects/export?collection.ids='$sf | tr -d '\r'

答案 1 :(得分:0)

echo "$CONFIG_PROTOCOL://$CONFIG_SERVER_SOURCE:$CONFIG_PORT/api/creation/objects/export?collection.ids=$sf"

尝试以上echo语句