我试图在我的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
任何意见都将受到赞赏。
答案 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语句