IFS 读取系统信息

IFS 读取系统信息

我尝试读取一些系统信息并将它们放入变量中:

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)

Bash:变量赋值似乎没有“坚持”

答案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
}

相关内容