Ralph Corderoy <[email protected]> writes:

> Hi Ken,
>
>> I'm having a heck of a time figuring out how to do shell quoting right
>> with command substitution.
>
> As Lyndon hinted, you need the shell to do an extra level of
> interpretation.
>
>> (Each "word" interpreted as an individual argument).  I've played
>> around with single quotes, double quotes, backslashes, and clearly I'm
>> missing something.
>
> Yes, it can't be done like that.
>
>     $ cat ken
>     #! /bin/sh
>
>     run_test() {
>         actual_output=`$1 2>&1`
>         echo actual_output: $actual_output
>     }
>
>     run_test2() {
>         actual_output=`eval $1 2>&1`
>         echo actual_output: $actual_output
>     }
>
>     fmttest() {
>         shift 3
>         printf '<%s>\n' "$@"
>     }
>
>     fmttest -raw -format '%(unquote)' "Mr. Foo Bar"
>     run_test 'fmttest -raw -format "%(unquote)" "Mr. Foo Bar"'
>     run_test 'eval fmttest -raw -format "%(unquote)" "Mr. Foo Bar"'
>     run_test2 'fmttest -raw -format "%(unquote)" "Mr. Foo Bar"'
>     $ 
>     $ ./ken
>     <Mr. Foo Bar>
>     actual_output: <"Mr.> <Foo> <Bar">

Hey, I just had this very same problem in one of my scripts.

>     actual_output: <Mr. Foo Bar>

Thanks very much for showing us the way! I thought I had tried eval, but
will try again with this example.

>     actual_output: <Mr. Foo Bar>
>     $ 
>
> In your run_test, $1 is being replaced with your whole fmttest command,
> including all its arguments, but double-quote processing doesn't then
> occur;  it already has and you've missed the boat.  You need instead to
> be prepared for two levels of interpretation and request another with
> eval.  Altering run_test to have the eval, like run_test2, might not be
> the correct fix though because some of your calls might not expect that
> extra level and need additional quoting.  The alternative is to add the
> eval to the run_test call just when it's needed, like my third example.
>
> Cheers, Ralph.
>
> _______________________________________________
> Nmh-workers mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/nmh-workers
>

-- 
Bill Wohler <[email protected]> aka <[email protected]>
http://www.newt.com/wohler/
GnuPG ID:610BD9AD


_______________________________________________
Nmh-workers mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/nmh-workers

Reply via email to