我对bash脚本编程是个新手,因此问题是,我有一个函数可以在系统中安装java并更新bashrc中的路径。
install_java(){
echo "Installing Java 8 & 11 and setting JAVA_HOME to 8"
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk8
brew cask install adoptopenjdk11
echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home"
}我想用java -version的输出更新硬编码的版本字符串这是我的java -version的输出
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)有人能帮我从第一行提取版本号并用它替换JAVA_HOME变量中的版本号吗?
发布于 2019-05-29 02:34:28
这里使用java -version|grep -oP 'java version\s"\K[^"]+'解析java版本,并将其存储在java_ver变量中,然后在JAVA_HOME赋值中替换。
install_java(){
echo "Installing Java 8 & 11 and setting JAVA_HOME to 8"
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk8
brew cask install adoptopenjdk11
java_ver=$(java -version 2>&1|grep -oP 'version\s"\K[^"]+')
echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk${java_ver}.jdk/Contents/Home"
}java -version 2>&1|grep -oP 'version\s"\K[^"]+'的解释
grep -o:这将只提取匹配的内容,而不是匹配的行,-P标志启用PCRE,现在正则表达式是java版本,后跟空格(\s),然后是",直到看到下一个"。此外,请忽略\K左侧的任何内容。
如果您的grep上没有启用 awk ,则可以使用grep命令:
install_java(){
echo "Installing Java 8 & 11 and setting JAVA_HOME to 8"
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk8
brew cask install adoptopenjdk11
java_ver=$(java -version 2>&1|awk '/version/{gsub(/"/,"",$NF);print $NF}')
echo "export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk${java_ver}.jdk/Contents/Home"
}https://stackoverflow.com/questions/56348161
复制相似问题