【问题标题】:printf using in /bin/bash在 /bin/bash 中使用 printf
【发布时间】:2016-11-27 19:43:33
【问题描述】:

我在 /bin/bash 中使用 printf(OS X 标准 GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin15) 版权所有 (C) 2007 Free Software Foundation, 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 的变量工作错误?

【问题讨论】:

  • 同时我找到了一个更短的解决方案: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 | cut -f 2 -d\')
  • grepsedtr 管道应该是单个 sed 命令:sed -n "/latest8/{s/.*= //;s/[';\r]//g;p}"
  • sed -n "/latest8/s/.*'\([^']*\)'.*/\1/p"

标签: linux bash macos printf


【解决方案1】:

如果你执行:

printf "%q \n" $latest_version

你得到:

$'1.8.0_101\r' 

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

要解决此问题,请将 \r 添加到您的 tr 命令中,这将像一个魅力一样工作:

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 

【讨论】:

  • @hek2mgl 我更喜欢在对他的代码进行最少修改的情况下回答 OP 问题,这样他就可以轻松理解出了什么问题
  • 我现在明白这个问题了。谢谢你。但是你怎么能看到我的表达式中的 latest_version 中是否有 \r。
  • 正如我所写,使用printf "%q \n" $latest_version
【解决方案2】:

您可以使用awk 管道curl 来解析最新版本:

latest_version=$(curl -s http://java.com/en/download/installed8.jsp |
awk -F= '/latest8/{gsub(/^[^[:digit:]]*|\x27.*$/, "", $2); print $2}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 2022-08-19
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    相关资源
    最近更新 更多