echo BASH变量覆盖文本问题

zev*_*lag 4 macos bash echo

OS X 10.6.5,BASH

当我运行这个:

echo $IP; echo of; echo $IPLINES
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

219.80.4.150:3128
of
1108
Run Code Online (Sandbox Code Playgroud)

当我运行这个:

echo $IP of $IPLINES
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

 of 1108.150:3128
Run Code Online (Sandbox Code Playgroud)

我期望得到:

219.80.4.150:3128 of 1108
Run Code Online (Sandbox Code Playgroud)

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

实际的脚本是这样的:

#!/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
Run Code Online (Sandbox Code Playgroud)

sle*_*ica 11

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

没有问题的快速脏修复:使用echo -n,它在回显文本的末尾压缩换行符.

echo -n $IP; echo -n of; echo -n $IPLINES
Run Code Online (Sandbox Code Playgroud)

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

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

  • 实际上在OS X中,行通常*不以*结尾.您通常只能在经典Mac OS时代的旧版旧应用程序中看到这些文件. (4认同)