bash逐行读取文件并使用行作为参数

时间:2013-01-13 13:09:34

标签: bash

我有一个文件'list',其中包含我要解压缩的档案列表。我的剧本是:

#!/bin/bash
while read line
do
   echo 'string has been read'
   grep -e '**.zip' | xargs -d '\n' unzip -o
done < 'list'

但它仅适用于列表中的第一个zip-archive并忽略列表中的其他字符串。如果我注释掉'grep -e '**.zip' | xargs -d '\n' unzip -o'脚本会读取所有行。

我无法理解为什么它以这种方式工作,以及如何解决它。

2 个答案:

答案 0 :(得分:3)

我认为即使没有循环也可以完成。

grep '\.zip$' < yourfile.txt | xargs -n1 unzip -o

或者,从stdin:

grep '\.zip$' | xargs -n1 unzip -o

-n1告诉xargs每个参数使用1个命令行

答案 1 :(得分:1)

你的循环中没有提到$line。因此它不会按照你想要的方式工作。

怎么样:

#!/bin/bash
while read line; do
    if [[ "$line" =~ "\.zip$" ]]; then
        unzip -o $line
    fi
done < list