如何在单引号中使用主机名变量?

how to use hostname variable in single quoted?

在名为 "input_data"

的 bash 文件中
LA=
curl -H 'Content-Type: application/x-ndjson' -XPOST '"'$LA'":9200/human_flow/human_flow/_bulk?pretty' --data-binary @.json

当运行命令

 ./input_data localhost human_flow

给出错误信息

bash-3.2$ ./input_data localhost human_flow
curl: (6) Could not resolve host: "localhost"

localhost可以解析

bash-3.2$ ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.067 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.156 ms

使用 127.0.0.1 而不是本地主机

bash-3.2$ ./input_data 127.0.0.1 human_flow
curl: (6) Could not resolve host: "127.0.0.1"

正确的用法如下:

curl \
  -H 'Content-Type: application/x-ndjson' \
  -XPOST \
  --data-binary "@.json" \
  "$LA:9200/human_flow/human_flow/_bulk?pretty"
  • 所有扩展都用双引号引起来 -- 既不在单引号中(防止它们被扩展)也不用引号引起来。
  • 如果希望双引号具有语义意义,则双引号不能放在单引号内。
  • 根据 POSIX 约定,位置参数应在所有可选参数之后指定。遵循 GNU 约定的应用程序并不严格要求这样做,但全面遵循它可以避免意外。