首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何拆分字符串以在for循环中导航?

如何拆分字符串以在for循环中导航?
EN

Stack Overflow用户
提问于 2021-04-27 05:28:28
回答 1查看 47关注 0票数 0

我对bash脚本不是很熟悉。我想用适当的role path=...格式回显每一行,但是这个for循环不允许我这样做。它基本上是一次性打印,而不是逐行打印。但有趣的是,当我运行vault list database/roles命令时,我能够逐行查看所有角色。

如何解决此问题?

代码:

代码语言:javascript
复制
for path in $(vault list database/roles);
do
    echo role path=${path}; 
done

输出:

代码语言:javascript
复制
role path=Keys
----
Role-1
Role-2
Role-3
Role-4
Role-5

附言:我需要保持循环中的所有内容,因为我稍后将运行此命令:vault delete database/roles/${path}

更新:vault list database/roles的输出

代码语言:javascript
复制
Keys ---- Role-1 Role-2 Role-3 Role-4 Role-5

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-04-27 06:20:28

假设vault list database/roles的输出如下所示:

代码语言:javascript
复制
Keys
----
Role-1
Role-2
Role-3
Role-4
Role-5

OP提到“将其保存在数组中”,但是在OP的当前代码中的任何地方都没有数组的迹象;在这一点上,我将假设其意图是将vault命令的输出存储在数组中。

在数组中存储角色(也称为vault输出)的一个想法是:

代码语言:javascript
复制
mapfile -t roles < <(vault list database/roles | tail +3)

这将创建并填充一个名为roles的数组,如下所示:

代码语言:javascript
复制
$ typeset -p roles
declare -a roles=([0]="Role-1" [1]="Role-2" [2]="Role-3" [3]="Role-4" [4]="Role-5")

从这里开始,OP可以像这样遍历数组:

代码语言:javascript
复制
for ((i=0; i<"${#roles[@]}"; i++))
do
    echo "${i} : ${roles[${i}]}"
done

# or

for i in "${!roles[@]}"
do
    echo "${i} : ${roles[${i}]}"
done

这两个循环都会生成:

代码语言:javascript
复制
0 : Role-1
1 : Role-2
2 : Role-3
3 : Role-4
4 : Role-5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67274040

复制
相关文章

相似问题

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