使用管道

时间:2016-05-23 19:38:20

标签: bash shell unix

我正在向我的主脚本接收一个参数($ 1),这是一个我应该阅读的文件。然后我需要对这些行做一些操作,然后将它们“修复”(已经对它们进行了操作,它们是新行)。我这样做:

cat "$1" | isValidParameters

isValidParameters返回新行,我现在想在主脚本中读入一个数组。我在想做类似的事情:

while read -r -a arr; do
    :
done < $(cat "$1" | isValidParameters)

但这似乎不起作用。如何将我从isValidParameters收到的行读入我的主脚本中的数组中,以便我可以在那里对它们执行操作?谢谢。

----------------------------------------------- ------
我编辑了我的代码@chepner建议:

while IFS= read -r line; do
    arr+=("$line")
done < <(isValidParameters < "$1")

printf "%s\n" "${arr[@]}"

当我运行时,我根本没有输出。
我运行的是:./getApartments dos > output.txt

注意:dos不是我目录中的真实文件,应打印isValidParametersFile is missing
这是isValidParameters

#!/bin/bash
PATH=$PATH:.

if(($# != 1 && $# != 3)); then
    echo "Illegal or missing parameters"
    exit 1
fi

if [[ !(-f $1) ]]; then echo "File is missing";
    exit 1
 fi

#find . $1 \*.flat -print

function search_file() {
    #echo "$1"

    for line in "$1"/*; do 
        if [[ $line == *.flat  && -f "$line" ]]; then
            echo "$line"
         fi

        if [[ $line == *.flat  && -d "$line" ]]; then
            search_file "$line"
        fi
    done
}

while read line; do
    if [[ $line == *.flat  && -f "$line" ]]; then
        echo "$line"
     fi

     if [[ $line == *.flat  && -d "$line" ]]; then
        search_file "$line"
    fi
done < "$1"

1 个答案:

答案 0 :(得分:1)

read -a不会将多行读入数组;它将一行拆分为字段,并使用这些字段填充数组。如果您使用bash 4,则可以使用readArray命令:

readArray -t arr < <(isValidParameters < "$1")

或在早期版本的bash中逐行附加到数组:

while IFS= read -r line; do
    arr+=("$line")
done < <(isValidParameters < "$1")