Bash может выводить переменные как строки, экранированные оболочкой:
$ X='1 2 te$t'; Y=$' \a\n\t '; printf '%q %q\n' "$X" "$Y" > .data
$ cat .data
1\ 2\ te\$t $' \a\n\t '
Возможно ли восстановить переменные X и Y из файла .data?Это должно быть безопасно, даже если .data содержит $(rm -rf /*)
.
Я ищу способ хранения записей (переменных X, Y) в формате «одна строка на запись».
РЕДАКТИРОВАТЬ
В моей задаче printf '%q'
может быть заменено на urlquote из Python.Решение:
$ X='1 2 te$t'; Y=$' \a\n\t ';
$ alias urlquote="python -c'import urllib, sys; print urllib.quote(sys.stdin.read())'"
$ alias urlunquote="python -c'import urllib, sys; print urllib.unquote(sys.stdin.read())'"
$ echo $(echo -n "$X" | urlquote) $(echo -n "$Y" | urlquote) > .data
$ cat .data
1%202%20te%24t %20%07%0A%09%20
$ while read -r x y; do
> x=$(echo "$x" | urlunquote)
> y=$(echo "$y" | urlunquote)
> printf '%q %q\n' "$x" "$y"
> done < .data
1\ 2\ te\$t $' \a\n\t '