【发布时间】:2021-05-20 01:11:53
【问题描述】:
我一直在尝试从此命令ioreg -r -c "AppleSmartBattery" 获取数据并将其每个输入保存到 sql db
$ ioreg -r -c "AppleSmartBattery"
+-o AppleSmartBattery{
"剩余时间" = 179
"AvgTimeToEmpty" = 179
"AdapterDetails" = {"FamilyCode"=0}
“充电超控”= 0
"AppleRawCurrentCapacity" = 2373
"InstantTimeToEmpty" = 154
"AppleRawMaxCapacity" = 3811
"ExternalChargeCapable" = 否
我需要将它保存到一个 sql 表中,其中一列是“*”,下一列是等于之后的值
我正在尝试构建一个“for循环”,但我已经走到了这一步,我无法弄清楚如何继续
batstat=$(ioreg -r -c "AppleSmartBattery")
for i in ${batstat[@]}; do
sed 's/^[^{]*{\([^{}]*\)}.*/\1/' $i
echo $i
done
我需要完成以下工作
- 每次 for 逐行执行时,在引号 "" 中获取一个值
- 将等号后的正确值分配给相应的引用值
谢谢:)
【问题讨论】:
-
Don't try to read lines with a
forloop。像while IFS= read -r lineloop 这样的东西效果更好。此外,sed 's/this/that/对文件(或标准输入)进行操作,而不是对变量进行操作。我还建议使用shellcheck.net,因为它会指出脚本中的常见错误。