shell脚本echo打印错位

问题描述

在脚本中使用curl命令请求Jenkins的API获取job的编号,随后将编号和其他字符串拼接后,使用echo命令打印出来,但打印后字符串错位了。

脚本大致如下:

num=curl API_URL | awk -F"#" '{print $2}'
echo /job/job_name/${num}/console

打印的出来是:

/console_name/74

预期的结果是

/job/job_name/74/console

排错尝试1

尝试手动echo了一下num,同时手动赋值了一下num再打印,代码如下

num=curl API_URL | awk -F"#" '{print $2}'
echo $num
echo "##########################"
num=1
echo /job/job_name/${num}/console

执行结果

74
##########################
/job/job_name/1/console

如此可以推测,获取到的返回值是没问题的,但可能带了某些不可见的字符。

排错尝试2

num=curl API_URL | awk -F"#" '{print $2}' | tr -d '\r'
echo /job/job_name/${num}/console

再次执行,符合预期,问题解决。

参考上面那篇文章,可以使用sh -x test.sh来执行脚本进行调试,能看到curl获取到的实际上是 74\r ,而不是单纯的74。

历史遗留问题,为了提高电传打印机(电传是在传真机普遍使用以前的通信设备,其原理有点近似电报。)的使用效率,发明了回车和换行符。\r是回车(回到行首),\n是换行。

在Unix中,行尾用 \n ,windows中,行尾是 \n\r ,Mac中是 \r 。

那么如果打印 abcdef\r123,就会得到 123def。据此,逆推验证一下

/job/job_name/74\r/console

使用/console覆盖到行首,的确得到
/console_name/74

Original: https://www.cnblogs.com/wswang/p/16591700.html
Author: wswang
Title: shell脚本echo打印错位

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585791/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • zabbix自定义监控mysql主从状态和延迟

    zabbix自定义监控mysql主从状态和延迟 zabbix自定义监控mysql主从状态和延迟 zabbix自定义监控mysql主从状态 zabbix自定义监控mysql主从延迟 …

    Linux 2023年6月13日
    0123
  • [Git系列] 前言

    Git 简介 Git 是一个重视速度的分布式版本控制和代码管理系统,最初是由 Linus Torvalds 为开发 Linux 内核而设计并开发的,是一款遵循二代 GUN 协议的免…

    Linux 2023年6月14日
    0116
  • 超好用的UnixLinux 命令技巧 大神为你详细解读

    1、删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除。我的rm和ls命令已经崩溃,我担心这是由于巨大的磁盘IO造成的,要删除这个大文件,输入: > /…

    Linux 2023年6月14日
    0111
  • Ansible简介

    Ansible 是一种常用的自动运维化工具,基于 python 开发,分布式,无需客户端,轻量级,配置语言采用 YAML。 模块化:调用特定的模块,完成特殊的任务。 2.Param…

    Linux 2023年6月6日
    0102
  • python入门基础知识四(字典与集合)

    dict_name = {key1:value1,key2,value2,…} 空字典:dict_name = {} or dict_name = dict() 字典的…

    Linux 2023年6月7日
    076
  • redis中setbit的用法

    原文地址:http://www.zhihu.com/question/27672245 在redis中,存储的字符串都是以二级制的进行存在的。举例:设置一个 key-value ,…

    Linux 2023年5月28日
    097
  • 分布式中灰度方案实践

    让请求在导航的服务节上点执行; 一、背景简介 分布式系统中会存在这样的开发场景,不同需求可能涉及到对同一个服务的开发,那么该服务在研发期间就会存在多个版本并行的状态,为了保持不同版…

    Linux 2023年6月14日
    0121
  • 文件漏洞上传

    一般危害:xss csrf ssrf获取后台登录 影响业务逻辑文件上传 严重级别漏洞,可以直接接管你的服务器 初级别: $target_path = DVWA_WEB_PAGE_T…

    Linux 2023年6月6日
    0114
  • 【PHP代码审计】TP3.2某传销系统getshell

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/sevck/p/16547738.htmlAuthor:…

    Linux 2023年5月28日
    0102
  • Python eval()函数

    The eval() takes three parameters: expression – this string as parsed and evaluated …

    Linux 2023年6月8日
    0102
  • 虚拟机无法联网

    状态:虚拟机使用NAT模式的VMnet8网卡, ping baidu.com 无法联通 解决: ipconfig查看物理机网络: ip配置:把网关 GATEWAY 改为 192.1…

    Linux 2023年6月8日
    095
  • 甲骨文严查Java授权,换openJDK要避坑

    背景 外媒The Register报道,甲骨文稽查企业用户,近期开始将把过去看管较松散的Java授权加入。 甲骨文针对标准版Java(Java SE)有2种商业授权。2019年4月…

    Linux 2023年6月14日
    0102
  • VirtualAlloc加载shellcode免杀一点记录

    一个很好的学习网站 推荐一下: https://docs.microsoft.com/zh-cn/windows/win32/api/ 0x01 VirtualAlloc Virt…

    Linux 2023年5月28日
    085
  • redis cluster 数据迁移

    1,先停止java的后台和.net的后台,停止对redis cluster进行访问 2,然后 cd /usr/local/redis-cluster/7001 每个节点都要做如下操…

    Linux 2023年5月28日
    093
  • linux系统性能诊断工具

    当你发现 Linux 服务器上的系统性能问题,在最开始的 1 分钟时间里,你会查看哪些系统指标呢? Netflix 在 AWS 上有着大规模的 EC2 集群,以及各种各样的性能分析…

    Linux 2023年6月13日
    093
  • 用powershell脚本,检测cpu100%,并触发sqlserver主备切换。

    我为园子设计的脚本大致如下:1慢检测:任务计划每分钟运行。发现cpu高于95%后,触发2。2快检测:每隔5秒钟运行,发现cpu高于95%,连续6次后,触发3。3报警n次。超出5分钟…

    Linux 2023年6月14日
    0115
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球