When using a POSIX shell, the following
touch {quick,man,strong}ly
expands to
touch quickly manly strongly
<
... There is so much wrong with using eval
. What you're asking is only possible with eval
, BUT what you might want is easily possible without having to resort to bash bug-central.
Use arrays! Whenever you need to keep multiple items in one datatype, you need (or, should use) an array.
TEST=(quick man strong)
touch "${TEST[@]/%/ly}"
That does exactly what you want without the thousand bugs and security issues introduced and concealed in the other suggestions here.
The way it works is:
"${foo[@]}"
: Expands the array named foo
by expanding each of its elements, properly quoted. Don't forget the quotes!${foo/a/b}
: This is a type of parameter expansion that replaces the first a
in foo
's expansion by a b
. In this type of expansion you can use %
to signify the end of the expanded value, sort of like $
in regular expressions.foo
, properly quote it as a separate argument, and replace each element's end by ly
.