linux - 如何拆分字符串以在 for 循环中导航?
问题描述
我对 bash 脚本不太熟悉。我想用正确的格式回显每一行,role path=...
但是这个 for 循环不允许我这样做。它基本上一次打印,而不是逐行打印。但有趣的是,当我运行vault list database/roles
命令时,我能够逐行查看所有角色。
我该如何解决这个问题?
代码:
for path in $(vault list database/roles);
do
echo role path=${path};
done
输出:
role path=Keys
----
Role-1
Role-2
Role-3
Role-4
Role-5
PS:我需要将所有内容保持在循环中,因为稍后我将运行此命令:vault delete database/roles/${path}
更新:输出vault list database/roles
Keys ---- Role-1 Role-2 Role-3 Role-4 Role-5
谢谢!
解决方案
假设输出vault list database/roles
看起来像:
Keys
----
Role-1
Role-2
Role-3
Role-4
Role-5
OP 提到'keep it in the array',但在 OP 的当前代码中任何地方都没有数组的迹象;在这一点上,我将假设目的是将vault
命令的输出存储在一个数组中。
将角色(又名vault
输出)存储在数组中的一种想法:
mapfile -t roles < <(vault list database/roles | tail +3)
roles
这将创建并填充一个命名如下的数组:
$ typeset -p roles
declare -a roles=([0]="Role-1" [1]="Role-2" [2]="Role-3" [3]="Role-4" [4]="Role-5")
从这里 OP 可以像这样循环遍历数组:
for ((i=0; i<"${#roles[@]}"; i++))
do
echo "${i} : ${roles[${i}]}"
done
# or
for i in "${!roles[@]}"
do
echo "${i} : ${roles[${i}]}"
done
这两个循环都生成:
0 : Role-1
1 : Role-2
2 : Role-3
3 : Role-4
4 : Role-5
推荐阅读
- python - 如何识别缺失的索引
- api - 企业或自助服务 API - 请求建议
- javascript - 在节点后端使用来自客户端 API 回调的变量
- amazon-web-services - 仅允许来自同一 VPC、子网和安全组中的实例的 ELB 连接
- c++ - 如何创建一个从一个 QTreeWidget 中删除项目并将其添加到另一个的函数?
- c - C 中的 `restrict` 限定符能否帮助查找由于重叠块而导致的错误?
- clang - clang 库的导入顺序
- apache-kafka - 无法从 Kafka 0.8.2.2 升级到 0.10.0.0
- c++ - c++ 在不使用全局变量的情况下捕获 ctrl+c
- python - Beautiful Soup 获得 td 类的数量