Использование 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