在bash中使用带循环的函数

时间:2018-03-07 06:11:07

标签: bash

使用简单的bash脚本遇到这个奇怪的问题:

#!/bin/bash

function printLinesFromInput {
    COUNTER=1
    while read USER; do 
        echo "Hello $USER"; 
        echo
    done < $1
}

while read USER; do 
    echo "Hello $USER"; 
done < south-park.txt

echo
echo "In function:"
echo $(printLinesFromInput south-park.txt)

打印:

$ ./readFile.sh
Hello Eric
Hello Kyle
Hello Stan
Hello Kenny

In function:
 Hello Kenny

该函数不回显文件的所有四行。 我想知道为什么会这样。 输入文件south-park.txt是:

Eric
Kyle
Stan
Kenny

1 个答案:

答案 0 :(得分:1)

我认为输入文件south-park.txt可能包含CR LF换行符。 试着说:

 ./readFile.sh | less

然后你会看到:

Hello Eric
Hello Kyle
Hello Stan
Hello Kenny

In function:
Hello Eric^M Hello Kyle^M Hello Stan^M Hello Kenny

要解决此问题,请删除输入文件中的\ r \ n或将功能修改为:

function printLinesFromInput {
    COUNTER=1
    while read USER; do
        echo "Hello $USER" | tr -d '\r'
    done < $1
}

顺便说一句,如果你想在用户之间插入换行符,你需要另一个技巧: - )。