Использование tr для обрезки строк из аргумента командной строки игнорируется

У меня есть сценарий оболочки, который должен обрезать перевод строки с ввода. Я пытаюсь обрезать новую строку так:

    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 

Последняя команда в сценарии повторяет то, что я думаю, что будет trimmed_param, если tr -d "\n" сработал в строке 2. Чего мне не хватает?

Я понимаю, что могу использовать sed и т. Д., Но... я бы хотел понять, почему этот метод не работает.

1 ответ

Решение

Там никогда не было новой строки в параметре. Это echo который добавляет новую строку. Пытаться

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

затем

bash script.sh foo

дает тебе

0000000    6f66    006f
          f   o   o
0000003
Другие вопросы по тегам