【发布时间】: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\') -
grep、sed、tr管道应该是单个sed命令:sed -n "/latest8/{s/.*= //;s/[';\r]//g;p}" -
或
sed -n "/latest8/s/.*'\([^']*\)'.*/\1/p"