美文网首页
如何把shell命令的输出按行存入数组

如何把shell命令的输出按行存入数组

作者: Lcy_lichunyu | 来源:发表于2018-05-02 00:00 被阅读0次

下载了一些电视剧,需要把 Downloads 目录下面的mkv文件统一存到一个文件夹中。第一次写 shell 脚本在处理find命令返回的结果时遇到了一些问题。

方法1

使用readarray 内建方法,readarray命令用于从标准输入或选项“-u”指定的文件描述符fd中读取文本行。

readarrary -t file_paths << "$(find ~/Downloads -name '*.mkv')"

这样find返回的mkv文件路径就被存到一个数组中了,然后就可以处理文件了。

但是,很不幸mac os x 不支持readarray这个命令,所以必须用其他方法。

方法2

这里要使用IFS这个变量。下面是对IFS的说明:

$IFS=$'\n' : $IFS is bash's [input field separator] setting it to the newline character only (\n) ensures that your output lines won't be split on whitespace so that you can save each >line as a separate array element. Without this, each word of your command's output would >be a different element.

所以,解决的方法就是:

oldifs = "$IFS"
IFS=$'\n'
file_paths=($(find ~/ -name '*.mkv'))
for file in ${file_paths[@]}
do
# do your command here
done 
IFS="$oldifs" # 别忘了把IFS改回去

写 python 比较多,加之第一次写shell脚本,第一次把 for 写成:

for file in ${file_paths}

结果只处理了第一项。shell 脚本中的数组名有点类似 C 中的数组名的用法。

相关文章

  • 如何把shell命令的输出按行存入数组

    下载了一些电视剧,需要把 Downloads 目录下面的mkv文件统一存到一个文件夹中。第一次写 shell 脚本...

  • C语言 scanf处理换行读取数据

    问题输入两行数字,把第一行数字存入array1数组,把第二行数字存入array2数组。(不能用readline和s...

  • Shell 学习

    shell 变量 shell 参数传递 shell 数组 shell 运算符 shell echo 命令 prin...

  • Shell 教程

    Shell 变量 Shell 传递参数 Shell 数组 Shell 基本运算符 Shell echo 命令 Sh...

  • fork在shell中如何工作

    fork在shell中如何工作 输出: ​ 这里看到三行输出,一行Before:信息和两行After:信息。进...

  • Python函数式编程之pipeline——很酷有没有

    Pipeline pipeline 管道借鉴于Unix Shell的管道操作——把若干个命令串起来,前面命令的输出...

  • Linux下的shell

    Shell 和 Linux shell程序是包含若干行shell或linux命令的文件。linux命令语句只能一行...

  • jq格式化对齐输出

    把输出格式化,对齐。例如,假设有json数据: 希望按行输出每一个数组内容: 自然输出 以四个空格作为分隔符输出。...

  • 使用shell脚本

    使用方式 shell 变量 shell 字符串操作 shell 数组 shell 注释 shell 命令行参数 s...

  • shell命令记录

    记录一下使用到的shell命令 split字符串到数组 按“\t”分割字符串到数组的需求,实现代码如下: echo...

网友评论

      本文标题:如何把shell命令的输出按行存入数组

      本文链接:https://www.haomeiwen.com/subject/tylvlftx.html