[英]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.