Кавычки внутри переменных, так что оболочка будет правильно интерпретировать вещи: hard . Именно этот тип вещей побуждает меня стремиться к более сильному языку. Будь то Perl, Python, Ruby или что-то еще (я выбираю Perl, но это не всегда для всех), это просто что-то , которое позволит вам обойти оболочку для цитирования.
Дело не в том, что мне никогда не удавалось сделать это правильно с либеральными дозами eval, но просто этот eval дает мне eebie-jeebies (становится совершенно новой головной болью, когда вы хотите принять ввод пользователя и оценить его, хотя в этом случае вы будете брать материал, который вы написали, и вместо этого оценивать его), и у меня начались головные боли при отладке.
На примере Perl я смогу сделать что-то вроде:
@tar_cmd = ( qw(tar cv), $directory );
@encrypt_cmd = ( qw(openssl des3 -salt) );
@split_cmd = ( qw(split -b 1024m -), $backup_file );
Сложной частью здесь является создание каналов - но немного IO :: Pipe , fork и повторное открытие stdout и stderr, и это неплохо. Кто-то скажет, что это хуже, чем правильно цитировать оболочку, и я понимаю, откуда они берутся, но для меня это легче читать, поддерживать и писать. Черт возьми, кто-то может взять на себя эту тяжелую работу и создать модуль IO :: Pipeline и сделать все это тривиальным; -)