linux循环存到数组,如何把shell命令的输出按行存入数组

下载了一些电视剧,需要把 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 中的数组名的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值