首页 > 解决方案 > 单个双引号字符串内的扩展变量

问题描述

我需要在字符串中扩展一个变量值。

问题是这个字符串是单引号并包含一个双引号字符串:

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"'

有任何想法吗?

标签: bashzsh

解决方案


不要使用单引号。单引号内的双引号只是值的一部分,例如 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"

推荐阅读