Bash:命令内部的变量

Bash:命令内部的变量,bash,shell,Bash,Shell,我对bash(编码)是个新手,我有一个问题,这个问题很容易解决。 我尝试了不同的版本,但从来没有给我正确的结果 我的目标是,它对每个子文件夹的路径使用curl命令。问题是,在curl命令中,它使用“${d}”而不是变量的内容。(通过回声测试) 问题是,${d}被单引号包围,因此它没有展开。要查看差异,请尝试: > d=5 > echo "${d}" 5 > echo '${d}' ${d} 因此: 在bash上,单引号(“”)和双引号(“”)有不同的含义。我尝试过在变量上不加

我对bash(编码)是个新手,我有一个问题,这个问题很容易解决。 我尝试了不同的版本,但从来没有给我正确的结果

我的目标是,它对每个子文件夹的路径使用curl命令。问题是,在curl命令中,它使用“${d}”而不是变量的内容。(通过回声测试)


问题是,
${d}
被单引号包围,因此它没有展开。要查看差异,请尝试:

> d=5
> echo "${d}"
5
> echo '${d}'
${d}
因此:


在bash上,单引号
(“”)
和双引号
(“”)
有不同的含义。我尝试过在
变量上不加任何引号,它可以与
echo
一起使用。因此,它也应该在没有回声的情况下工作。只需将
-d
标记用双引号括起来,其中的变量将被视为变量而不是字符串

#!/bin/bash
# GNU bash, version 4.3.46

for d in 1 2 3 4 5
do
    echo "curl http://localhost:3456/api/command -X POST -d "{'name': 'something', 'path': ${d}}" --header "X-Api-Key:myapikey""
done
如果动态变量需要报价,

 for d in "'1'" "'2'" "'3'" "'4'" "'5'"
do
    echo "curl http://localhost:3456/api/command -X POST -d "{'name': 'something', 'path': ${d}}" --header "X-Api-Key:myapikey""
done

演示:选项1

编写一个函数来获取对象,如果对象有许多参数要插值,则此函数非常有用

get_data()
{
  cat <<EOF

 {"name": "something", 
  "path": "$d"
 } 
 EOF 
}
选项2

关闭单引号并像这样连接

'{"name": "something", "path": ' "$d" ' }'

非常感谢您的回复。我使用了选项2。唯一的问题是,打印$d的内容时没有使用“”。解决方法是将其更改为“$d”
get_data()
{
  cat <<EOF

 {"name": "something", 
  "path": "$d"
 } 
 EOF 
}
curl http://localhost:3456/api/command -X POST -d "$(get_data)" --header "X-Api-Key:myapikey"
'{"name": "something", "path": ' "$d" ' }'