Bash 带有大量单引号和双引号命令的脚本
Bash script with a command with lots of single and double quotes
我需要使用 curl 命令:
curl -d '{ "auth_token": "YOUR_AUTH_TOKEN", "text": "Hey, Look what I can do!" }' \http://localhost:3030/widgets/welcome
在 bash 脚本中,而不是 "YOUR_AUTH_TOKEN" 之后的 "Hey, Look what I can do!";我需要一个变量 $p .
这是我第一次尝试 bash 脚本并阅读有关引号等的教程,但我仍然无法使其工作。
最简单的做法是从 here 文档(一种动态创建的临时文件)中读取数据,而不是尝试将整个内容作为字符串引用:
curl -d@- http://localhost:3030/widgets/welcome <<EOF
{ "auth_token": "YOUR_AUTH_TOKEN",
"text": "$p" }
EOF
如果 -d
的参数以 @
开头,参数的其余部分将作为包含数据的文件的名称。 -
的文件名表示标准输入,curl
的标准输入由 EOF
标记之间的行提供。
替代方法是对字符串加双引号并转义所有嵌入的双引号。呸
... -d "{\"auth_token\": \"YOUR_AUTH_TOKEN\", \"text\": \"$p\"}" ...
chepner 非常好的答案的替代方法:
data=$( printf '{"auth_token":"YOUR_AUTH_TOKEN","text":"%s"}' "$p" )
curl -d "$data" http://localhost:3030/widgets/welcome
我需要使用 curl 命令:
curl -d '{ "auth_token": "YOUR_AUTH_TOKEN", "text": "Hey, Look what I can do!" }' \http://localhost:3030/widgets/welcome
在 bash 脚本中,而不是 "YOUR_AUTH_TOKEN" 之后的 "Hey, Look what I can do!";我需要一个变量 $p .
这是我第一次尝试 bash 脚本并阅读有关引号等的教程,但我仍然无法使其工作。
最简单的做法是从 here 文档(一种动态创建的临时文件)中读取数据,而不是尝试将整个内容作为字符串引用:
curl -d@- http://localhost:3030/widgets/welcome <<EOF
{ "auth_token": "YOUR_AUTH_TOKEN",
"text": "$p" }
EOF
如果 -d
的参数以 @
开头,参数的其余部分将作为包含数据的文件的名称。 -
的文件名表示标准输入,curl
的标准输入由 EOF
标记之间的行提供。
替代方法是对字符串加双引号并转义所有嵌入的双引号。呸
... -d "{\"auth_token\": \"YOUR_AUTH_TOKEN\", \"text\": \"$p\"}" ...
chepner 非常好的答案的替代方法:
data=$( printf '{"auth_token":"YOUR_AUTH_TOKEN","text":"%s"}' "$p" )
curl -d "$data" http://localhost:3030/widgets/welcome