使用管道从不同的外壳读取行



我在我的主脚本中接收了一个参数($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 "%sn" "${arr[@]}"

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

注意:dos 不是我目录中的真实文件,那些isValidParameters应该打印:File 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"

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新