2017-09-12 6 views
0

これは、httpサーバにjson本体をポストするために使用される小さなコマンドラインスクリプトです。私は最初のコマンドライン引数$ 1をjson本体に渡すのが難しいと思っています。コマンドが失敗しないBashスクリプティング、コマンドライン変数を代用することはできません

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

、しかし、HTTPボディは正確に

含まれている私は、{ "ゲーム":$(($ 1)):16、 "ID"}

をスクリプト./script 123を実行してjson本体を送信したい

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

これを行うにはどうしたらよいですか?

+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/ 
関連する問題