我有一个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_param是什么。我错过了什么?
我意识到我可以使用sed等但是......我很想知道为什么这种方法失败了。
答案 0 :(得分:3)
参数中从未有过换行符。这是附加换行符的echo
。尝试
# script.sh
param=$1
printf "%s" "${param}" | od -xc
然后
bash script.sh foo
给你
0000000 6f66 006f
f o o
0000003