使用tr从命令行参数修剪换行符忽略

时间:2018-04-25 21:25:03

标签: linux shell tr

我有一个shell脚本,需要从输入中修剪换行符。我正试图修剪新的线条:

    param=$1
    trimmed_param=$(echo $param | tr -d "\n")

    # is the new line in my trimmed_param?  yes
    echo $trimmed_param| od -xc

    # if i just run the tr -d on the data, it's trimmed. 
    # why is it not trimmed in the dynamic execution of echo in line 2
    echo $param| tr -d "\n" |od -xc

我从命令行运行它,如下所示:

    sh test.sh someword

我得到了这个输出:

    0000000    6f73    656d    6f77    6472    000a
              s   o   m   e   w   o   r   d  \n
    0000011
    0000000    6f73    656d    6f77    6472
              s   o   m   e   w   o   r   d
    0000010 

脚本中的最后一个命令回应了我认为如果tr -d“\ n”在第2行中有效,我会认为trimmed_pa​​ram是什么。我错过了什么?

我意识到我可以使用sed等但是......我很想知道为什么这种方法失败了。

1 个答案:

答案 0 :(得分:3)

参数中从未有过换行符。这是附加换行符的echo。尝试

# script.sh
param=$1
printf "%s" "${param}" | od -xc

然后

bash script.sh foo

给你

0000000    6f66    006f
          f   o   o
0000003