Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Nested quotes



On Tue, Nov 24, 2015 at 09:37:58AM +0000, Peter Stephenson wrote:
> On Tue, 24 Nov 2015 08:36:27 +0100
> Dominik Vogt <vogt@xxxxxxxxxxxxxxxxxx> wrote:
> > Maybe I'm just thick this morning, but how do you "nest" double
> > quotes here:
> > 
> >   $ FILE="foo bar"
> >   $ echo "$(readlink -f $FILE)"
> >   readlink: extra operand `bar'
> > 
> > Obviously $FILE needs to be quoted too.
> 
> I'm guessing the difference between you and Simon is you have the
> SH_WORD_SPLIT option set for some sort of sh-compatibility.  You've now
> discovered why it's not set by default.
> 
> You either to turn the option off again or provided explicit quoting of
> $FILE where it occurs as an argument to readlink.
> 
> To wokr out how to quote it, you need to know that the fact the readlink
> command is in $(...) inside quotes can be ignored --- the contents of an
> $(...) expression are parsed step by step, so the only thing that will
> terminate it is that closing ")", which can't occur in a syntactically
> valid fashion for any other reason.  (That wasn't fully true until
> quite recently, but the details only involve odd cases like case
> statements where unpaired closing parentheses occur, so you can ignore
> this subtlety for simple expressions even with older versions of the
> shell.)
> 
> So it's fine to do
> 
>   echo "$(readlink -f "$FILE")"

Thanks for the explanation; I wasn't aware of this property of
$(...).  The reason why I have shwordsplit is really to be closer
to other shells when scripting, i.e. to force myself to quote
properly.

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt
IBM Germany



Messages sorted by: Reverse Date, Date, Thread, Author