我正在尝试编写一个 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;
对我做错的任何帮助将不胜感激。