首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ShellCheck在抱怨我的表达式不是双引号,而实际上是双引号;为什么?

ShellCheck在抱怨我的表达式不是双引号,而实际上是双引号;为什么?
EN

Unix & Linux用户
提问于 2020-03-18 20:22:38
回答 1查看 1.2K关注 0票数 9

我正在用AWS编写bash脚本,而shellcheck给出了一个我认为是不正确的错误。我想弄清楚它为什么会这样。

下面是代码和错误消息:

代码语言:javascript
复制
for server in $(${aws} ec2 describe-instances --query 'Reservations[].Instances[][].{Name: Tags[?Key==`Name`].Value[] | [0]}' --filters "Name=tag:Name,Values=${server_name}*" --output text);
                                                                                                                                                                            ^-- SC2016: Expressions don't expand in single quotes, use double quotes for that.

我无法让代码在SO编辑器中正确地对齐,但是^--指向代码中的*。本部分:

代码语言:javascript
复制
"Name=tag:Name,Values=${server_name}*"

该错误提供了指向ShellCheck文档的链接作为参考,但是当我再次检查所有内容时,它看起来就像是在遵从。:D

我猜想*正在抛出一些东西,我知道我可以通过执行shellcheck -e SC2016来解决这个问题,但是我真的很想知道到底是什么导致鲤鱼吃贝壳。

有什么想法吗?

EN

回答 1

Unix & Linux用户

发布于 2020-03-19 12:57:10

不是回答,而是格式化的评论:

实际上,您不应该使用for循环,而应该使用while read循环:

代码语言:javascript
复制
while IFS= read -r server; do
    : do stuff here
done < <(
    "$aws" ec2 describe-instances \
        --query 'Reservations[].Instances[][].{Name: Tags[?Key==`Name`].Value[] | [0]}' \
        --filters "Name=tag:Name,Values=${server_name}*" \
        --output text
)

for循环读取空格-分隔的单词while循环读取 --参见http://mywiki.wooledge.org/BashFAQ/001

或者,使用readarray捕获输出

代码语言:javascript
复制
readaray -t servers < <(
    "$aws" ec2 describe-instances \
        --query 'Reservations[].Instances[][].{Name: Tags[?Key==`Name`].Value[] | [0]}' \
        --filters "Name=tag:Name,Values=${server_name}*" \
        --output text
)

for server in "${servers}"; do ...; done

最后,对于长而不可读的命令,将选项存储在数组中可以提高可读性:

代码语言:javascript
复制
opts=(
    --query 'Reservations[].Instances[][].{Name: Tags[?Key==`Name`].Value[] | [0]}' 
    --filters "Name=tag:Name,Values=${server_name}*"
    --output text
)

readarray -t servers < <("$aws" ec2 describe-instances "${opts[@]}")
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/573654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档