Bash:变量命令内部

时间:2018-04-14 06:11:35

标签: bash shell

我真的很想接受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

3 个答案:

答案 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

DEMO: http://rextester.com/live/YAWHVN41557

答案 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" ' }'