From: Jonathan Nieder Date: Fri, 22 Oct 2010 08:34:50 GMT Subject: Re: Buglet in i18n? Message-ID: <20101022083450.GA8289@burratino> In-Reply-To: Ævar Arnfjörð Bjarmason wrote: > gettext () { > printf "%s" "$1" > } > > eval_gettext () { > gettext_eval="printf '%s' \"$1\"" > printf "%s" "`eval \"$gettext_eval\"`" > } This looks wrong. Consider a simplified example: eval_gettext 'foo "bar baz"' Now eval_gettext is supposed to just interpolate $variable substitutions, right? In particular, the quotation marks ought to be preserved. But instead, what gets evaluated is: printf '%s' "foo "bar baz"" which splits as printf '%s' 'foo bar' 'baz' which is equivalent to printf '%s' 'foo bar' printf '%s' 'baz' with output foo barbaz Maybe something like this would do it? gettext_eval=$( printf '%s\n' "$1" | sed ' s/[`\\"]/\\&/g 1 s/^/printf "%s" "/ $ s/$/"/ ' ) && eval "$gettext_eval"