我正在向我的主脚本接收一个参数($ 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不是我目录中的真实文件,应打印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"
答案 0 :(得分:1)
read -a
不会将多行读入数组;它将一行拆分为字段,并使用这些字段填充数组。如果您使用bash
4,则可以使用readArray
命令:
readArray -t arr < <(isValidParameters < "$1")
或在早期版本的bash
中逐行附加到数组:
while IFS= read -r line; do
arr+=("$line")
done < <(isValidParameters < "$1")