无法在for循环中将变量用作命令参数

时间:2019-01-31 09:58:39

标签: bash loops

我正在尝试在for循环内执行命令。该命令需要一个我正在尝试通过变量

的参数

我尝试了不同的方法(使用方括号,不使用方括号,括号,没有引号等),并且一直在搜索bash文档,但没有成功(无论如何我都不是bash的专家)。

JQ="jq --raw-output --exit-status"

service_array="$(aws ecs list-services --cluster "mycluster" | JQ ".serviceArns")"

for service in $(echo "${service_array}" |  JQ '.[]'); do
  echo "Updating service: " ${service} # Works
  aws ecs update-service --cluster "mycluster" --service ${service} --force-new-deployment # Doesn't work
done

预期结果是执行命令,实际结果是只有echo命令似乎起作用。

service_array已正确填充,当我在for循环外执行该命令时,该命令可以正常工作。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

没有更多信息,我只能假设service包含空格或其他特殊字符,因此需要用引号引起来:

aws ecs update-service --cluster "mycluster" --service "${service}" --force-new-deployment # Doesn't work

注意:您可能也应该在echo命令中添加类似的引号,尽管它在这里不太重要,因为echo不在乎参数是否被分解或扩展为多个参数。