使用 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
我有一个 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