sub to_sh_lit { my ($s) = @_; die if !utf8::downgrade($s, 1); # Expecting bytes. die if $s =~ /\x00/; # NUL can't be passed. $s =~ s/('+)/'"$1"'/g; return "'$s'"; } my $lit_param = to_sh_lit($param); print SH "echo $lit_param\n";