Linux 如何拆分字符串以在for循环中导航?
我不太熟悉bash脚本。我想用正确的格式回显每一行Linux 如何拆分字符串以在for循环中导航?,linux,bash,shell,Linux,Bash,Shell,我不太熟悉bash脚本。我想用正确的格式回显每一行角色路径=…,但是这个for循环不允许我这样做。它基本上是一次性打印,而不是逐行打印。但有趣的是,当我运行vault list database/roles命令时,我可以逐行查看所有角色 我如何解决这个问题 代码: 输出: role path=Keys ---- Role-1 Role-2 Role-3 Role-4 Role-5 注意:我需要保持循环中的所有内容,因为我稍后将运行此命令:vault delete database/roles/
角色路径=…
,但是这个for循环不允许我这样做。它基本上是一次性打印,而不是逐行打印。但有趣的是,当我运行vault list database/roles
命令时,我可以逐行查看所有角色
我如何解决这个问题
代码:
输出:
role path=Keys
----
Role-1
Role-2
Role-3
Role-4
Role-5
注意:我需要保持循环中的所有内容,因为我稍后将运行此命令:vault delete database/roles/${path}
更新:vault列表数据库/角色的输出
Keys ---- Role-1 Role-2 Role-3 Role-4 Role-5
谢谢 假设来自
vault列表数据库/角色的输出如下所示:
Keys
----
Role-1
Role-2
Role-3
Role-4
Role-5
OP提到“将其保存在数组中”,但OP当前代码中没有任何数组的迹象;此时,我将假定其目的是将vault
命令的输出存储在一个数组中
将角色(akavault
output)存储在数组中的一个方法是:
mapfile -t roles < <(vault list database/roles | tail +3)
从这里,OP可以像这样在数组中循环:
$ typeset -p roles
declare -a roles=([0]="Role-1" [1]="Role-2" [2]="Role-3" [3]="Role-4" [4]="Role-5")
for ((i=0; i<"${#roles[@]}"; i++))
do
echo "${i} : ${roles[${i}]}"
done
# or
for i in "${!roles[@]}"
do
echo "${i} : ${roles[${i}]}"
done
这回答了你的问题吗?可能是vault
打印到stderr。请尝试$(vault…2>&1)
。但这很奇怪,role path=Keys
中的Keys
来自哪里?在这种情况下,vault列表数据库/角色| sed的/^/role path=/
似乎是一个更简单的解决方案。顺便说一句,从它现在的行为方式来看,我怀疑你改变了IFS
,这通常是个坏主意(至少之后会恢复正常)。@KamilCuk保险库列表输出的前两行…
是键\n----\n
,但回音上没有引号,获取此输出没有任何意义。@KamilCuk它打印到stderr的任何内容都将在role path=
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