前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【linux命令讲解大全】010. mapfile命令和tempfile命令的用法及示例

【linux命令讲解大全】010. mapfile命令和tempfile命令的用法及示例

作者头像
全栈若城
发布2024-03-02 11:24:34
2130
发布2024-03-02 11:24:34
举报
文章被收录于专栏:若城技术专栏

mapfile

从标准输入读取行并赋值到数组。

概要

mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]

主要用途

从标准输入或文件描述符读取行并赋值到数组。

选项

  • -d delim: 将 delim 设为行分隔符,代替默认的换行符。
  • -n count: 从标准输入中获取最多 count 行,如果 count 为零那么获取全部。
  • -O origin: 从数组下标为 origin 的位置开始赋值,默认的下标为0。
  • -s count: 跳过对前 count 行的读取。
  • -t: 读取时移除行分隔符 delim(默认为换行符)。
  • -u fd: 从文件描述符 fd 中读取。
  • -C callback: 每当读取了 quantum 行时,调用 callback 语句。
  • -c quantum: 设定读取的行数为 quantum

如果使用 -C 时没有同时使用 -c 指定 quantum 的值,那么 quantum 默认为5000。 当 callback 语句执行时,将数组下一个要赋值的下标以及读取的行作为额外的参数传递给 callback 语句。 如果使用 -O 时没有提供起始位置,那么 mapfile 会在实际赋值之前清空该数组。

参数

array(可选):用于输出的数组名称。如果没有指定数组名称,那么会默认写入到变量名为 MAPFILE 的数组中。

返回值

返回成功除非使用了非法选项、指定的数组是只读的、指定的数组不是下标数组。

例子

代码语言:javascript
复制
# 常见的读取形式。
mapfile < source_file target_array
cat source_file |mapfile target_array
mapfile -u fd target_array

# 只读取前5行。
mapfile < source_file -n 5 target_array

# 跳过前5行。
mapfile < source_file -s 5 target_array

# 在数组指定的下标开始赋值。
# 请注意:这样做不会清空该数组。
mapfile < source_file -O 2 target_array

# 读取时设定行分隔符为tab。
# 注意,第二行的tab在终端需要用ctrl+v tab输入;
mapfile < source_file -d $'\t' target_array
mapfile < source_file -d '	' target_array

# 读取时移除行分隔符(tab)。
mapfile < source_file -d $'\t' -t target_array
# 读取时移除行分隔符(换行符)。
mapfile < source_file -t target_array

# 每读取2行,执行一次语句(在这里是echo)。
mapfile < source_file -C "echo CALLBACK:" -c 2 target_array

# 遍历下标,依次显示数组的元素。
for i in ${!target_array[@]}; do
  printf "%s" ${target_array[i]}
done

注意: 该命令是bash内建命令,相关的帮助信息请查看 help 命令。 bash内建命令 readarraymapfile 的同义词。

tempfile

shell中给临时文件命名

补充说明

有时候在写Shell脚本的时候需要一些临时存储数据的才做,最适合存储临时文件数据的位置就是/tmp,因为该目录中所有的内容在系统重启后就会被清空。下面是两种方法为临时数据生成标准的文件名。

tempfile 命令

tempfile 命令只有在基于Debian的发行版中才默认自带,比如Ubuntu,其他发行版没有这个命令。

tempfile 命令为一个临时文件命名:

代码语言:javascript
复制
temp_file_name=$(tempfile)

用一个加带了随机数的文件名作为临时文件命名:

代码语言:javascript
复制
temp_file_name="/tmp/file_$RANDOM"

$RANDOM 是一个返回随机数的环境变量。

$$ 变量

如果没有 tempfile 命令的Linux发行版,也可以使用自己的临时文件名:

代码语言:javascript
复制
temp_file_name="/tmp/file.$$"
是系统预定义变量,显示当前所在进程的进程号,用 .

作为添加的后缀会被扩展成当前运行脚本的进程id。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mapfile
    • 概要
      • 主要用途
        • 选项
          • 参数
            • 返回值
              • 例子
              • tempfile
                • 补充说明
                  • tempfile 命令
                  • $$ 变量
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档