首页 > 解决方案 > 使用 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 等,但是......我很想了解为什么这种方法会失败。

标签: linuxshelltr

解决方案


参数中从来没有换行符。它是echo附加换行符的。尝试

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

然后

bash script.sh foo

给你

0000000    6f66    006f
          f   o   o
0000003

推荐阅读