linux - printf 使用 in/bin/bash

标签 linux bash macos printf

我在/bin/bash 中使用 printf (OS X 标准 GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin15) 版权所有 (C) 2007 自由软件基金会,Inc.

#!/bin/bash
latest_version=\
$((curl -s http://java.com/en/download/installed8.jsp 2>/dev/null || wget -q -O - http://java.com/en/download/installed8.jsp) | grep 'latest8' |sed -E "s/.*= //" |tr -d "';")
echo $latest_version
printf "%s \n" $latest_version

我想获取字符串“1.8.0_102”(截至2016/7/24)

这表明

#echo
1.8.0_101
#printf
8.0_101

我想将字符串设置为红色,并且脚本将在 OS X 和 linux 中运行,所以我不想使用 echo。

为什么我无法通过 printf 获取 1.8.0_101?

下面还有什么问题吗?

printf "Get the latest Java \033[1;31m %s \033[m from Oracle.\n" $latest_version

它也不起作用......

当我输入时,我有一个提示

latest_version=1.8.0_101

然后就可以了。

所以$()输入到latest_version的变量工作错误?

最佳答案

如果执行:

printf "%q \n" $latest_version

你得到:

$'1.8.0_101\r' 

您可以看到多余的\r(回车)字符。

要解决此问题,请将 \r 添加到您的 tr 命令中,这样就可以像 super 按钮一样工作:

latest_version=$((curl -s http://java.com/en/download/installed8.jsp 2>/dev/null || wget -q -O - http://java.com/en/download/installed8.jsp) | grep 'latest8' |sed -E "s/.*= //" |tr -d "';\r")
printf "%s \n" $latest_version

输出:

1.8.0_101 

关于linux - printf 使用 in/bin/bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551256/

相关文章:

bash - "-ne"在 bash 中是什么意思?

objective-c - 在图像上应用多个 CIFilter

linux - fsync 系统调用在 Linux 中如何工作?

c++ - 如何从 GStreamer 中的应用程序获取事件?

regex - 从区域文件中提取 IP 和指针记录

bash (Linux) 中的 Python3.4 不提供文本着色

objective-c - 一种获取 Cocoa (Swift/Obj-C) 中所有声明的 UTI 的方法...和/或确定应用程序包定义的 UTI?

ruby - chruby 和 chgems 能代替 rvm 的 gemset 吗?

linux - vi 编辑器在左侧显示括号日期和时间戳

c - sem_post(flag) 上的段错误运行时间