使用 tr 忽略命令行参数中的 trim 换行符

Using tr to trim newlines from command-line argument ignored

我有一个 shell 脚本需要从输入中 trim 换行。我正在尝试 trim 新行,如下所示:

    param=
    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_param 相呼应。我错过了什么?

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

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

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

然后

bash script.sh foo

给你

0000000    6f66    006f
          f   o   o
0000003