我尝试读取一些系统信息并将它们放入变量中:
df -k | grep /dev/mmcblk0p1 | IFS=" " read -r device blocks used available use_percent mounted_on
它不起作用,所有变量都是空的。
答案1
问题不在于 IFS,而是因为在 bash(和某些其他 shell)中,管道的 RHS 是在子 shell 中执行的。
一个简单的替代方法是使用进程替换来保留read
在父 shell 中:
read -r device blocks used available use_percent mounted_on < <(df -k | grep /dev/mmcblk0p1)
答案2
如果使用分配变量read
,则这些变量必须是同一块语句的一部分{ ... }
:
df -k | grep /dev/mmcblk0p1 | {
read -r device blocks used available use_percent mounted_on
printf "device=%s\nblocks=%s\nused=%s\navailable=%s\nuse_percent=%s\nmounted_on=%s\n" $device $blocks $used $available $use_percent $mounted_on
}