簡體   English   中英

在/ bin / bash中使用的printf

[英]printf using in /bin/bash

我在/ bin / bash(OS X標准GNU bash版本3.2.57(1)-發行版(x86_64-apple-darwin15))中使用printf(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的變量工作不正確?

您可以使用awk通過curl解析最新版本:

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

如果執行:

printf "%q \n" $latest_version

你得到:

$'1.8.0_101\r' 

您會看到多余的\\r (回車符)字符。

要解決此問題,請將\\r添加到您的tr命令中,它將像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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM