首页 > 系统相关 >shell脚本echo打印错位

shell脚本echo打印错位

时间:2022-08-16 15:34:52浏览次数:72  
标签:shell console name echo job num 错位 74

问题描述

在脚本中使用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

看到了这篇文章,https://cloud.tencent.com/developer/article/1559118,提到可以在curl后加一个过滤,变成

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

标签:shell,console,name,echo,job,num,错位,74
From: https://www.cnblogs.com/wswang/p/16591700.html

相关文章

  • shell脚本
    ####@Title:to_omp_quota_config##@Kind:shell####@Author:####@Tips:ThisisaUNCHOSENTEMPLATE##ANDyoucouldwritedownyourcodebelowc......
  • shell特殊字符
    ;分号连续运行命令#ifdowneth0;ifupeth0 |管道正则表达式中表示或者#echo"ooooee"|egrep'(oo|ee)'{2}表示匹配oooo或者eeee的字符前面命令的标......
  • shell 正则匹配
    if[["abcyyy13554221547HelloxxxWorld"=~yyy([0-9]{11})(Hello)xxx(.*)]]thenechoTheregexmatches!echo$BASH_REMATCHec......
  • Shell语言开发基础模板
    内容概要基础阶段脚本处理/测试变量操作符分支结构之if分支分支结构之case分支循环结构之while循环循环结构之for循环函数脚本处理/测试#脚本处理window回车是......
  • XShell7和Xftp免费下载,亲测可用
    作为一个后端开发,我相信会经常和服务器打交道,我们需要连接服务器,查看服务状态,查看日志,还需要向服务器上传jar包等等,那么就很需要一款好用的服务器连接工具了。笔者工作这......
  • linux通过xshell远程登录失败
    状态描述:确认ssh配置完好,重启后查看日志也正常。openssh版本8.5。通过xshell远程连接,提示服务器拒绝连接。处理过程:由于是虚拟机,之前通过vnc连接的一个终端还未关闭。修......
  • shell重复执行命令直到成功
    在我们从dockerhub或github上下载的时候,经常会碰到超时的问题,一般就是多尝试下载几次就可以了,但手动重复执行很麻烦,下面是自动检测若未成功执行就自动再次执行命令的代码:w......
  • SecureCRT 和 Xshell 连接ENSP 教程
    前言:很多人问我说想尝试使用CRT和Xshell连接ENSP的某台设备,以模拟现网中的工作状态,所以出了这篇随笔。ENSP版本:  Xshell连接教程Xshell7评估版(其他版本没测试......
  • shell编程之免交互
    Shell编程之免交互一、HereDocument免交互1.HereDocument概述HereDocument使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如ftp、cat或read命令。HereDo......
  • macOS change default shell from zsh to bash All In One
    macOSchangedefaultshellfromzshtobashAllInOne$cat/etc/shells#Listofacceptableshellsforchpass(1).#Ftpdwillnotallow......