0

我正在尝试编写一个 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;

对我做错的任何帮助将不胜感激。

4

1 回答 1

0

改变:

loc_out=($(<${2})); # this is not right

对此:

loc_out=(${2}); # this should be right

您只希望在该行中包含文件名。

希望这能解决您的问题。

编辑:

此外,您可以/应该这样写:

loc_in=${1};
loc_out=${2};

据我了解,您不需要括号。

于 2013-10-13T10:17:46.560 回答