首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash将变量分配给命令输出,该输出将是多个字串的列表。

Bash将变量分配给命令输出,该输出将是多个字串的列表。
EN

Stack Overflow用户
提问于 2022-01-06 05:26:13
回答 1查看 68关注 0票数 2

这就是我想要运行的脚本

代码语言:javascript
复制
bRules=(`aws s3api get-bucket-lifecycle-configuration --bucket x |  jq '.Rules[]'.ID`)
echo "*** Total number of LifecycleRules ****  ${#bRules[@]}"
for rule in "${bRules[@]}"
do
    echo "Bucket: x, Rule: $rule"
done

实际输出

代码语言:javascript
复制
*** Total number of LifecycleRules ****  6
 Bucket: x, Rule: This
 Bucket: x, Rule: is
 Bucket: x, Rule: Rule-1
 Bucket: x, Rule: This
 Bucket: x, Rule: is
 Bucket: x, Rule: Rule-2

预期产出:

代码语言:javascript
复制
*** Total number of LifecycleRules ****  2
Bucket: x, Rule: This is Rule-1
Bucket: x, Rule: This is Rule-2

在我的代码片段中需要更改什么才能获得所需的输出?我有点不知所措来解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2022-01-06 07:14:21

不要依赖命令替换和分词。使用readarray (或者如果您愿意的话使用mapfile )和进程替换。

您的循环也可以简化为一个printf

代码语言:javascript
复制
readarray -t bRules < <(aws s3api get-bucket-lifecycle-configuration --bucket x | jq '.Rules[]'.ID)
echo "*** Total number of LifecycleRules ****  ${#bRules[@]}"
printf 'Bucket: x, Rule: %s\n' "${bRules[@]}"

巴什手册

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70602858

复制
相关文章

相似问题

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