linux - 使用 tr 从命令行参数中修剪换行符被忽略
问题描述
我有一个需要从输入中修剪换行符的 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 等,但是......我很想了解为什么这种方法会失败。
解决方案
参数中从来没有换行符。它是echo
附加换行符的。尝试
# script.sh
param=$1
printf "%s" "${param}" | od -xc
然后
bash script.sh foo
给你
0000000 6f66 006f
f o o
0000003
推荐阅读
- visual-studio - 如何转到下一个 HTML 属性?可视化代码快捷方式
- c# - 了解 LINQ 子查询
- xslt-2.0 - 使用 xslt2 搜索和替换 xml 错误
- linux-kernel - 在自定义 YOCTO 层中使用配置片段添加内核配置选项
- python - 容器与 python 请求的通信
- python-3.x - “Aufgabe”对象没有属性“beanworten”(Python 3.6)
- javascript - 如何在 Vue 中动态创建组件上获取更新的 $refs?
- javascript - 如何使用 DataTables、Ajax 调用和 Json 响应重新加载表数据?
- google-cloud-storage - 如何使用 gsutil 查找和复制?
- ruby - 有什么方法可以从 EC2 windows 实例连接到 VPN?