Re: Buglet in i18n?
From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:49:50
Æ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"