我想寫一個bash函數,我可以定期從更大的一組腳本中調用。我想通過這個函數的名稱包含文本字符串的一個普通列表的文件:Bash函數參數分配讀取文件(列表)並寫入文件(數組)
blue
red
green
...和具備的功能寫出這些字符串到不同的文件(其名稱也作爲傳遞參數在bash兼容的數組形式的功能):
[Bb]lue [Rr]ed [Gg]reen
我不能得到的功能(內部)認識到輸出文件的名稱傳遞。它會拋出一個「模棱兩可的重定向」錯誤,然後出現一堆「沒有這樣的文件或目錄」錯誤。但是,它正在處理輸入文件確定。問題出現在我如何將參數分配給函數中的本地字符串。不幸的是,我已經改變了函數中的loc_out=
這麼多次,以至於我不能再回憶我嘗試過的所有表單。希望這個例子很明顯,如果不是最佳做法:
process_list() {
# assign input file name to local string
loc_in=(${1});
# assign output file name to local string
loc_out=($(<${2})); # this is not right
while read line
do
echo "loc_out before: $loc_out";
echo "loc_in term: $line";
item_length=${#line};
# loop until end of string
for ((i=0; i<$item_length; i++));
do
echo "char $i of $line: ${line:$i:1}";
# write out opening bracket and capital
if [ ${i} -eq 0 ]; then
echo -e "[" >> $loc_out;
echo -e ${line:$i:1} | tr '[:lower:]' '[:upper:]' >> "${loc_out}";
fi;
# write out current letter
echo -e ${line:$i:1} >> "${loc_out}";
# write out closing bracket
if [ ${i} -eq 0 ]; then
echo -e "]" >> "${loc_out}";
fi;
done;
# write out trailing space
echo -e " " >> "${loc_out}";
# check the output file
echo "loc_out after: ${loc_out}";
done < $loc_in;
}
f_in="/path/to/colour_list.txt";
f_out="/path/to/colour_array.txt";
echo "loc_in (outside function): ${loc_in}";
echo "loc_out (outside function): ${loc_out}";
process_list $f_in $f_out;
任何幫助我做錯了將不勝感激。
'$(<$ {2})'假設$ 2是一個文件名,這表示打開文件並將文件的所有內容放在您的shell腳本中。我不認爲這就是你想要做的。祝你好運。 – shellter
謝謝@shellter。我在最初分配函數頭部的文件句柄和稍後在函數底部附近回顯此文件的內容之間感到困惑。第二個最後的函數行應該在$(<$ {loc_out})「;'之後讀取'echo」loc_out。 – oweng