Я называю свой сценарий:
$ ./script 'a!#*`*&
^$' "sdf sdf\"qw sdsdf" 1 -- 2 3
Получает аргументы:
1: a!#*`*&
^$
2: sdf sdf"qw sdsdf
3: 1
4: --
5: 2
6: 3
Если мне нужно вызвать что-то с теми же аргументами локально, я делаю это:
someprogram "$@"
Но как я могу поместить весь этот массив в строку (чтобы сохранить в файле или в переменной среды или передать через TCP eaisly), а затем вернуть его обратно в аргументы командной строки? Я хочу, чтобы это было просто, коротко и безопасно.
export CMDLINE="$@"
# What is in CMDLINE now? Escaped or not?
sh -c "someprogram $CMDLINE"
# Will it do what I mean?
В идеале мне нужны две программы: первая преобразует параметры командной строки в строку [a-zA-Z0-9_]*
, а другая - в параметры командной строки, которые я могу использовать.
Обновление: написано 2 версии пар сценариев. Что более полезно?