>>>>> Artem Chuprina <r...@lasgalen.net> writes: >>>>> Ivan Shmakov -> debian-russian@ @ Fri, 14 Jul 2017 20:00:32 +0000:
[…] >>> SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY" >>> for x in ${SSHVARS} ; do >>> (eval echo $x=\$$x) | sed 's/=/="/ >>> s/$/"/ >>> s/^/export /' >> Bash позволил бы обойтись без eval ("${x}=${!x}"), но, похоже, POSIX >> такую подстановку не регламентирует. >> … Однако вполне можно обойтись без Sed: >> eval echo export "$x"=\\\'\${"$x"//\\\'/\\\'\\\\\\\'\\\'}\\\' > Ой... Спасибо, я лучше sed. То, что написано у меня, я хотя бы > прочесть в состоянии... «Нечитаемая» часть моего варианта относится не к замене Sed, а к обработке всех возможных имен файлов. Другими словами — содержащих одинарные кавычки (всюду заменяемые на «'\''»): $ XYZ=/a\'b\ c\*\'d $ x=XYZ $ eval echo export "$x"=\\\'\${"$x"//\\\'/\\\'\\\\\\\'\\\'}\\\' export XYZ='/a'\''b c*'\''d' $ Если этого не требуется — убираем подстановку с заменой ${(имя)//(шаблон)/(замена)}: eval echo export "$x"=\\\'\$"$x"\\\' Или же (по вкусу): eval echo export "$x=\\'\$$x\\'" Cf. исходный eval: eval echo $x=\$$x -- FSF associate member #7257 58F8 0F47 53F5 2EB2 F6A5 8916 3013 B6A0 230E 334A