You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用cat命令将交换分区文件名存入Bash数组?

提取交换分区路径到数组的正确方法

我来帮你搞定这个问题!你的核心需求是把系统里的交换分区路径单独提取出来存入数组,原来的代码有几个小问题导致达不到预期,下面给你拆解并给出可行方案:

方案一:用while循环+awk提取(兼容多数bash版本)

# 初始化空数组
swap_array=()
# 跳过/proc/swaps的表头,提取每行第一列(交换分区路径)并存入数组
while IFS= read -r swap_path; do
    swap_array+=("$swap_path")
done < <(awk 'NR>1 {print $1}' /proc/swaps)

方案二:用mapfile快速实现(bash 4.0+推荐)

如果你的bash版本是4.0及以上,用mapfile可以更简洁高效地完成:

# 直接把awk输出的每行存入数组,-t用于去除换行符
mapfile -t swap_array < <(awk 'NR>1 {print $1}' /proc/swaps)

验证数组内容

你可以用下面的命令查看数组里的内容:

# 打印所有元素
printf "%s\n" "${swap_array[@]}"

输出会是:

/swapfile
/dev/hda1
/some/other/swap

也就是你想要的[/swapfile, /dev/hda1, /some/other/swap]数组形式。

原来代码的问题分析

  1. 数组作用域问题:你原来的代码里array=()后面没有加;或者换行,导致while循环和数组赋值不在同一个命令序列里,循环运行在子shell中,不会修改父shell的数组,最终数组为空。
  2. 提取内容错误:grep "swap"会获取整行内容,而你只需要第一列的交换分区路径,所以需要用awk提取$1(第一列)。
  3. 分隔符选择不当:read -d $'\0'是按null字符分隔,但/proc/swaps的内容是换行分隔的,用这个会导致读取异常,换成默认的换行分隔(去掉-d $'\0')就正常了。

内容的提问来源于stack exchange,提问作者CertifcateJunky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:27:37