Mantendo sua lógica, eu reformei o sed
em um formato um pouco compacto, em que a alteração para o JAVA_HOME é feita uma vez no início do sed.
Além disso, há um pouco sobre como escapar da variável java para que ela seja incluída no comando rhs
de s///
sed
.
Além disso, o sed
é POSIX
-ly.
java_esc=$(printf '%s\n' "$java" | sed -e 's|[\&/]|\&|g;$!s/$/\/')
sed -i.BAK -e '
1{
x
s/.*/export JAVA_HOME='"$java_esc"'/
x
}
# assuming the JAVA_HOME declaration does not span line boundaries
/^[[:blank:]]*export[[:blank:]]\{1,\}JAVA_HOME=/{
g
x
s/^/\
/
x
}
${
x
/^\n/!H
x
}
' ~/.bashrc