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

