我正在接收我的主腳本的一個參數($ 1),這是一個文件,我應該讀取這些行。然後,我需要對這些行做一些操作,並將它們返回「固定」(已對它們執行操作,它們是新行)。我做這樣的:使用流水線從不同shell讀取行
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"
是什麼'<(isValidParameters <「$ 1 「)'不同於'$(cat」$ 1「| isValidParameters)''? – LamaEu
因爲'<'需要文件名,而不是文件的內容。 '<(...)'提供了一個「假」文件的名稱,從中可以讀取所附命令的輸出。 – chepner
這是行不通的,tho:/ – LamaEu