Это ваш eval
, который поглощает ваши кавычки.
Вы можете использовать косвенную переменную, ссылающуюся с bash> = 2.0, чтобы устранить необходимость в eval
:
echo "${VAR}=\"${!VAR}\"" >> $FILE
К сожалению, двойные (или тройные ...) разыменования не поддерживаются, поэтому вы не можете сделать ${!!VAR}
или ${!${!VAR}}
- вам все равно придется прибегнуть к методу eval
для тех.Но я не думаю, что вам это нужно в этом случае.
Если вы действительно хотите использовать eval
, то вам придется дважды избегать побегов, например:
eval echo "$VAR=\\\"\$$VAR\\\"" >> $FILE
Или, если вам действительно нужен дополнительный уровеньвыполнение (как в вашем примере выше), то вам нужно тройной выход из ваших побегов!
`eval echo echo $VAR=\\\\\"\\$$VAR\\\\\"` >> $FILE
Лично я предпочитаю 1-й метод: -)