より大きなスクリプト セット内から定期的に呼び出すことができる 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;
私が間違っていることについての支援は大歓迎です。