为什么xargs的前/后会影响后续echo命令的输出?

时间:2015-03-28 11:53:20

标签: bash shell

Bash noob在这里,对以下shell函数的行为感到好奇(旨在快速打包ascifiied十六进制序列):

pack()
{
    sedF=$(Extended_SED)               # choose "-r"/"-E" for BSD/Linux flavors
    IN=$(sed 's/%//g' <<< "$1")        # allow "%41%41..."
    if [ -z $(grep '\\x' <<< "$IN") ]  # allow "4142..."
    then 
        IN=$(sed -$sedF 's/(..)/\\\\x\1/g' <<< "$IN")
    else                               # allow "\x41\x42..."
        IN=$(sed -$sedF 's/\\/\\\\/g' <<< "$IN")
    fi
    echo "$IN" | xargs echo -en        # pack through -e, suppress CR
   # testing
    echo "$IN"                     
    echo -en "$IN"                     # doesn't pack
 }

pack "\x41\x41"pack "4141"都会产生以下输出:

AA\\x41\\x41
\x41\x41

但是当我从命令行运行echo -e "\\x41\\x41"echo -e "\x41\x41"时,在脚本之外,我总是得到AA,这与这些命令在内部运行时的行为有着惊人的不同。脚本。

所以即使它不是脚本的问题,我很好奇 - (a)为什么在脚本中只使用xargs导致所需的输出{{1 }}? ; (b)为什么脚本中非echo -en xargs的行为与脚本之外的行为不同,即从命令行运行时?

0 个答案:

没有答案