Как сравнить список переменных в bash?

#bash #variables #compare #difference

#bash #переменные #Сравнить #разница

Вопрос:

Я пытаюсь сохранить список переменных, измененных моим скриптом, для последующей перезагрузки с помощью set.

 initialVars="`set -o posix ; set`"
source script
saveTime="$(date  "%Y-%m-%d %T")" #first time declaring this var
saveVars="`grep -vFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars=`"
echo $saveVars > snapshot.sav
unset saveVars
  

На первый взгляд кажется, что это работает нормально, но я замечаю, что snapshot.sav не содержит большого количества переменных, которые, несомненно, были изменены скриптом, но даже не были инициализированы до того, как я установил initialVars. Например, он не включает время сохранения.

Я проверил содержимое initialVars, переменных, которые еще не были инициализированы, там нет, но присутствуют, если я посмотрю на (set -o posix ; set) перед grepping.

Что-то не так с greps? Я довольно новичок в bash, поэтому, возможно, я чего-то не вижу.

Извините, если мой вопрос немного запутанный, у меня пока нет большого опыта в программировании устранения неполадок.

Ответ №1:

Добавьте -x опцию, чтобы она соответствовала целым строкам:

 saveVars="`grep -vxFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars=`"
  

Также нет необходимости в saveVars переменной. Вы можете просто сделать:

 grep -vxFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars= > snapshot.sav
  

Комментарии:

1. -x решил мою проблему, большое спасибо! А также спасибо за совет по ненужному var, так намного аккуратнее.