【发布时间】:2022-01-10 04:05:15
【问题描述】:
这就是我获取所有 NVME 卷的方式:
all_nvme_volumes=$(sudo nvme list -o json | jq .Devices[].DevicePath)
输出是这样的:
"/dev/nvme0n1" "/dev/nvme1n1" "/dev/nvme2n1" "/dev/nvme3n1" "/dev/nvme4n1" "/dev/nvme6n1"
我如何循环通过它们单独处理它们?
我试过for r in "${all_nvme_volumes[@]}"; do echo "Device Name: $r"; done,但输出是Device Name: "/dev/nvme0n1" "/dev/nvme1n1" "/dev/nvme2n1" "/dev/nvme3n1" "/dev/nvme4n1" "/dev/nvme6n1"
这是一个字符串而不是数组的每个元素:
【问题讨论】:
-
与
jq和--raw-output(或-r)选项一起使用。它打印原始字符串而不是 JSON 字符串(被引用),每个项目的末尾都有一个换行符。然后你可以直接使用你想要的for循环。无需使用 Bash 数组。另外:nvme本身是否不能提供原始(非 JSON)输出,从而更容易在 shell 中进行迭代? -
请显示
sudo nvme list -o json的输出,并将您想要的输出(无描述、无图像、无链接)添加到您的问题(无评论)的示例输入中。