我有一个 bash 文件:
#!/bin/bash
# yesnobox.sh - An inputbox demon shell script
OUTPUT="/tmp/input.txt"
# create empty file
>$OUTPUT
# cleanup - add a trap that will remove $OUTPUT
# if any of the signals - SIGHUP SIGINT SIGTERM it received.
trap "rm $OUTPUT; exit" SIGHUP SIGINT SIGTERM
# show an inputbox
dialog --title "Inputbox" \
--backtitle "Search vacancies" \
--inputbox "Enter your query " 8 60 2>$OUTPUT
# get respose
respose=$?
# get data stored in $OUPUT using input redirection
name=$(<$OUTPUT)
curl -d '{"query":"developer", "turnOff":true}' -H "Content-Type: application/json" -X POST http://localhost:8080/explorer
在最后一个字符串中(卷曲命令)我想设置变量姓名反而“开发人员”.如何正确插入?
答案1
要访问变量,必须在名称前面加上美元符号:$name
但是,变量不会在用“单引号”括起来的字符串内展开。不过,如果展开后的值可能包含空格,则应将它们括在“双引号”内,以防止分词。
所以基本上有两种方法,我们要么将整个参数放在双引号中以使变量可扩展,但然后我们必须转义里面的双引号字符,以便它们最终出现在实际参数中(命令行缩短):
curl -d "{\"query\":\"$name\", \"turnOff\":true}" ...
或者,我们可以将不同类型的引号中的字符串文字紧挨在一起,从而将它们连接起来:
curl -d '{"query":"'"$name"'", \"turnOff\":true}' ...
答案2
答案3
@ByteCommander 的回答很好,假设您知道的值name
是正确转义的 JSON 字符串文字。如果您不能(或不想)做出这样的假设,请使用类似 的工具jq
为您生成 JSON。
curl -d "$(jq -n --arg n "$name" '{query: $n, turnOff: true}')" \
-H "Content-Type: application/json" -X POST http://localhost:8080/explorer
答案4
有些人可能会发现它更具可读性和可维护性,因为它避免使用转义以及难以跟踪和匹配的单引号和双引号序列。
使用 Bash 的等效方法sprintf
来模板化替换:
printf -v data '{"query":"%s", "turnOff":true}' "developer"
curl -d "$data" -H "Content-Type: application/json" -X POST http://localhost:8080/explorer