我真的很想接受bash(编码)并且我有一个问题,这可能很难解决。 我已经尝试了不同的版本,但它从来没有给我正确的结果。
我的目标是,它使用curl命令和每个子文件夹的路径。问题是,在curl命令中,它使用" $ {d}"而不是变量的内容。 (用echo测试)
for d in `find /some/path -mindepth 1 -type d`
do
curl http://localhost:3456/api/command -X POST -d '{"name": "something", "path": "${d}"}' --header "X-Api-Key:myapikey"
done
答案 0 :(得分:0)
问题是${d}
被单引号包围,因此不会展开。要看到差异,请尝试:
> d=5
> echo "${d}"
5
> echo '${d}'
${d}
所以:
> d=5
> echo \"{\"name\": \"something\", \"path\": \"${d}\"}"
{"name": "something", "path": "5"}
答案 1 :(得分:0)
关于bash单引号('')
和双引号("")
具有不同的含义。我在variable
上没有任何引号的情况下尝试过,它适用于echo
。所以它也应该在没有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
答案 2 :(得分:0)
选项1
编写一个函数来获取对象,如果对象有许多要插入的参数,这很有用。
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"
选项2
关闭单引号并像这样连接
'{"name": "something", "path": ' "$d" ' }'