2017-09-12 55 views
0

这是一个小命令行脚本,用于在http服务器中发布json主体。我发现难以将第一个命令行参数$ 1传递给json主体。Bash脚本,不能替代命令行变量

#!/bin/bash 
curl -X POST -d '{ "game": 16, "id": $(($1)) }' http://localhost:10000/ 

的命令不会失败,但HTTP主体正好包含

{ “游戏”:16, “ID”:$(($ 1))}

我想运行脚本./script 123并发送json主体

{ "game": 16, "id": 3 } 

如何使用bash来做到这一点?

+0

是的,需要的一切。这实际上是一个数字,例如12345,所以我需要所有字符 – cateof

+0

一般来说,你不应该使用字符串插值来创建JSON,因为'$ 1'的内容可能需要正确地转义以产生有效的JSON。像'$(jq --arg val“$ 1”'{game:16,id:$ val}')'是更合适的。 – chepner

回答

1

使用单引号将打印文字字符。您需要使用双引号进行字符串插值。尝试:

curl -X POST -d "{ \"game\": 16, \"id\": $1 }" http://localhost:10000/ 
2

您还可以使用单引号,这样你就不必转义双引号是这样的:

#!/bin/bash 
curl -X POST -d '{ "game": 16, "id": '$1' }' http://localhost:10000/