Мне интересно, как я могу просто заменить эту переменную в BASH:
VARIABLE1 = "VALUE2=somestring2 VALUE3=TRUE"
Мне нужно просто изменить VALUE2=какая-то строка2 (это всего лишь часть строки) на новое значение, которое заменяет его:
я просто использую это:
VARIABLE1 = "${VARIABLE1//VALUE2=[a-z0-9-]*/}VALUE2=${VALUE2}"
где ЗНАЧ2=${ЗНАЧ2} — новое значение, которое я указываю в какой-то строке.
но тут две проблемы:
1- строка, где я перезаписываю VALUE2=какая-то строка2, удаляет ЗНАЧЕНИЕ3=ИСТИНА из ПЕРЕМЕННАЯ1
2- выглядит так, будто после перезаписи VALUE2 ставится пробел в начале "VALUE2=somestring2"
эхо $ПЕРЕМЕННАЯ1 "VALUE2=somestring2"
Есть ли способ исправить это?
Спасибо за это. Я вижу, что * портит то, что я хочу сделать. Но я не нашел способа исправить это.





Пытаться
shopt -s extglob
VARIABLE1=${VARIABLE1/VALUE2=*([a-z0-9-])/VALUE2=$VALUE2}
shopt -s extglob включает расширенную подстановку в Bash. Это позволяет (среди прочего) встроенному механизму подстановки использовать форму регулярных выражений (здесь). См. раздел extglob в глобус — Greg's Wiki.*([a-z0-9-]), потенциально опасны. Они могут конфликтовать со многими существующими специальными переменными ALL_UPPERCASE. См. Правильное использование заглавных букв в сценариях Bash и shell. Такие имена, как VARIABLE1, как правило, безопасны.
Это не регулярное выражение, которое вы используете, это шар. Вот почему
*захватывает весь текст до конца. И вы не используете sed здесь.