2010-12-10 51 views
3

OS X 10.6.5,BASH回声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 

回答

9

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

快速脏修复没有问任何问题:使用echo -n,它抑制了回声文本末尾的换行符。

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

如果问题仍然存在,可能是我上面所说的。尝试右键修整$IP

编辑:没有看到OSX部分,对不起。在OSX中,行以\r结尾 - 这肯定是问题所在。

+0

右,右。我改变了我的文件中的行尾,解决了问题。感谢-n,我不熟悉那个标志。 – zevlag 2010-12-10 18:51:32

+3

实际上在OS X中,线条通常*不会以\ r结尾。您通常只能在来自传统Mac OS日期的旧版旧应用的文件中看到该文件。 – 2010-12-10 21:09:28

+0

您也可以使用'tr'删除不需要的字符:'cleanline =“$(echo $ line | tr -d'\ r')'' – xonya 2016-08-30 13:50:14

2

这样看来,有在$IP结束回车(\r)。