Jeez. Я не знаю, почему другие ответы сделали это настолько сложным. Bash имеет почти встроенную поддержку для этого.
В сценарии экспорта:
myArray=( ' foo"bar ' $'\n''\nbaz)' ) # an array with two nasty elements
myArray="${myArray[@]@Q}" ./importing_script.sh
(обратите внимание, двойные кавычки необходимы для правильной обработки пробелов в элементах массива.)
При входе в importing_script.sh
значение переменной среды myArray
содержит эти точные 26 байтов:
' foo"bar ' $'\n\\nbaz)'
Затем восстанавливается следующий массив:
eval "myArray=( ${myArray} )"
ВНИМАНИЕ! Не нравится eval
, если вы не можете доверять источнику переменной среды myArray
. Этот трюк демонстрирует уязвимость «Маленькие бреющие столы» . Представьте, чтобы кто-то установил значение myArray
на ) ; rm -rf / #
.