我在我的主脚本中接收了一个参数($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")