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)

大家都在看

  • ASP.NET Core 3.0 : 二十四. 配置的Options模式

    上一章有个配置的绑定的例子,可以将配置绑定到一个Theme实例中。也就是在使用对应配置的时候,需要进行一次绑定操作。而Options模式提供了更直接的方式,并且可以通过依赖注入的方…

    Linux 2023年6月7日
    088
  • .NET 6上的WebView2体验

    上次说为了不想在web端登录博客园,我想着还是继续使用 MarkWord编写博客,不过在使用的过程中,如果markdown文件的目录中有中文的话,Markdown预览就不能够显示粘…

    Linux 2023年6月6日
    0109
  • openssh升级至7.2

    此处升级操作的原则是保留系统原有ssh服务,新安装高版本ssh服务 1、下载openssh源码包 http://www.openssh.com/portable.html 2、安装…

    Linux 2023年6月14日
    0103
  • Java学习笔记_Lambda学习

    在Java8之前,如果想”让参数具备行为能力”,即将代码块作为参数进行传递,这是很不方便的。比较普遍的方式就是创建一个类的实例对象,让实例去调用这个方法,从…

    Linux 2023年6月7日
    0103
  • 顺序栈

    #pragma once #ifndef _SEQSTACK_ #define _SEQSTACK_ #include using namespace std; typedef i…

    Linux 2023年6月7日
    081
  • Linux netstat:查看网络状态

    netstat 主要用于网络监控,在进程管理方面也很重要。它的输出分为两大部分,分别是网络和系统自己的进程相关性部分。 netstat [-atunlp] -a 列出目前系统上所有…

    Linux 2023年6月13日
    094
  • Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

    作为承载海量数据存储的分布式文件系统,用户通常需要直观地了解整个系统的容量、文件数量、CPU 负载、磁盘 IO、缓存等指标的变化。 JuiceFS 没有重复造轮子,而是通过 Pro…

    Linux 2023年6月14日
    088
  • 项目的部署和环境搭建

    项目的部署和环境搭建 cd /opt (一般项目部署的文件代码都放在/opt目录下) 3.进入项目跟目录下的docker目录: cd crm _pro/docker 4.执行doc…

    Linux 2023年6月7日
    089
  • CNN卷积神经网络的构建

    1.卷积神经网络由输入层,卷积层,激活函数,池化层,全连接层组成. input(输入层)–conv(卷积层)–relu(激活函数)–pool(池…

    Linux 2023年6月6日
    082
  • Redis深入浅出

    bash;gutter:true; RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前…

    Linux 2023年5月28日
    0102
  • Centos7最小化安装报错There are no enabled repos. Run “yum repolist all” to see the repos you have.解决办法

    原因是缺少CentOS-Base.repo文件,因为我这台机器wget也不能用,所以我是下载到本地sftp上去的,传输的时候一定要在root用户下,否则会无法启动传输 这是报错的完…

    Linux 2023年6月7日
    099
  • 【已解决】wordpress 修改固定链接 伪静态URL出现nginx 404错误

    一、站点设置 打开站点设置,选择伪静态,选择wordpress 二、wordpress设置 打开wordpress后台,选择 设置 —》固定链接 选择一个你喜欢的格式点…

    Linux 2023年6月14日
    099
  • 【设计模式】Java设计模式-适配器模式

    【设计模式】Java设计模式 – 适配器模式 😄 不断学习才是王道🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆原创作品,更多关注我CSDN: 一…

    Linux 2023年6月6日
    0167
  • GCC 内联汇编基础

    GCC 内联汇编 在 MIT6.828的实验中,有几处用到了很底层的函数,都以内联汇编的形式存在,例如 static inline uint32_t read_esp(void) …

    Linux 2023年6月8日
    082
  • Dockerfile 构建镜像

    从 Dockerfile 构建镜像涉及三个步骤 创建工作目录 编写 Dockerfile 规格 使用 docker build 命令构建镜像 1. 创建工作目录 这个根据应用实际情…

    Linux 2023年6月6日
    0107
  • Redis源码系列(一)

    Redis源码系列——内存管理 函数原型 src/zmalloc.h 函数指针与 void*指针的使用,提供了一个泛型的机制 /*stringfication*/ #define …

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