bash - 单个双引号字符串内的扩展变量
问题描述
我需要在字符串中扩展一个变量值。
问题是这个字符串是单引号并包含一个双引号字符串:
checksum256=$sha256sum $filename
curl -X POST \
'http://localhost:8080/documents?application=RDOCUI&user=nif' \
-F docFile=@/home/jeusdi/projects/repositori-digital/stress/randomfile4b7f12a2-2cb0-49e3-b02b-1ededaa281e5.txt \
-F 'docAttributes={
"confidential":"N",
"transactionId": "sdf",
"codiDirCorp": "CorpCode",
"expiration": "10/10/2025",
"description": "desc",
"locked": "N",
"title": "titol",
"docHash": "${checksum256}" <<<<<<<<<<<<<<<<<< THE PROBLEM IS HERE
}'
checksum256
没有展开。
请注意,此扩展位于单引号字符串内,同时位于双引号字符串内:
'"$expansion"'
有任何想法吗?
解决方案
不要使用单引号。单引号内的双引号只是值的一部分,例如 ana
或 a 1
。他们不会告诉外壳扩展引号,因为它们不是外壳引号。
使用双引号来引用整个字符串,转义里面的文字引号:
-F "docAttributes={...,\"docHash\": \"$checksum256\" ...}"
或者更好的是,使用jq
它为您安全地生成 JSON 值。checksum256
(如果自身的值包含双引号,则上述操作可能会失败。)
attrs=$(jq -n --arg ck "$checksum256" '{confidential: "N", ..., docHash: $k}')
curl -X POST ... -F "docAttributes=$attrs"
推荐阅读
- javascript - Angular - 模板中调用的模型方法在无限循环中执行
- angularjs - 需要 angularjs-dragula 包时未加载 angularjs 指令
- sql - 计算分布在多行上的一系列事件的发生次数
- excel - 加法自动筛选 - 解决方法
- clickhouse - ClickHouse - 每个查询插入一百多个条目
- python - 如何计算被随机字母包围的特定字符
- angular - 根据在两个搜索字段中输入的数据组合来自两个请求的结果
- c - 将 bash 命令 echo 和 bc 流水线化到 C 程序中
- android - 如何在另一个活动中将用户图纸保存到 SQLite 数据库?
- php - 使用 str_pad 时,Laravel 会修剪空格吗?