变量用" echo"覆盖文本问题在巴什

时间:2010-12-10 18:36:14

标签: macos bash echo

我使用OS X 10.6.5,Bash。

当我运行时:

echo $IP; echo of; echo $IPLINES

我得到了这个输出:

219.80.4.150:3128
of
1108

当我运行时:

echo $IP of $IPLINES

我得到了这个输出:

 of 1108.150:3128

我希望得到:

219.80.4.150:3128 of 1108

什么会导致我得到的扭曲输出?

实际的脚本是:

#!/bin/bash

IPLINES=`cat a.txt | wc -l | awk '{print $1}'`

if [ $IPLINES > 1 ]; then
    LINE=`expr $RANDOM % $IPLINES + 1`
    IP=`head -$LINE a.txt | tail -1`
    sed -e "${LINE}d" -i .b a.txt

    echo $IP of $IPLINES
fi

2 个答案:

答案 0 :(得分:10)

这里有一个疯狂的猜测:你从.txt文件中提取IP变量 - 如果是Windows文件,或者是Windows风格编码,则行以\r\n结束。你把新换线拿走了,但是如果它里面有\r会让你回到线的开头呢?

快速脏修复,没有提出任何问题:使用echo -n,它会在回显文本的末尾截断换行符。

echo -n $IP; echo -n of; echo -n $IPLINES

如果问题仍然存在,那可能就是我上面所说的。尝试正确修剪$IP

编辑:没看到OSX部分,抱歉。在OSX中,行以\r结尾 - 这必须是问题。

答案 1 :(得分:2)

\r的结尾似乎有一个回车符($IP)。