zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
To: zsh-workers@sunsite.auc.dk (Zsh hackers list)
Subject: Re: Zsh Guide chapter 5 (substitutions)
Date: Tue, 28 Aug 2001 22:25:54 +0100	[thread overview]
Message-ID: <20010828212559.367FA1427E@pwstephenson.fsnet.co.uk> (raw)
In-Reply-To: "Bart Schaefer"'s message of "Tue, 21 Aug 2001 16:38:43 -0000." <1010821163843.ZM21870@candle.brasslantern.com>

Bart Schaefer wrote:
> And that's all, except that I'm left puzzling over this:
> 
>  The other tricky point is the use of double quotes in the eval. That
>  means that if the second argument has a double quote in it, the shell
>  will get very confused.
> 
> This refers to:
> 
>      eval "f2=\"$result\""
> 
> I'm left wondering whether
> 
>      f2=${(e)result}
> 
> wouldn't be equivalent and avoid the need for the double quotes?

Well, hmm.  Yeah.

Fixed some other things, too.

Index: Functions/Misc/zmv
===================================================================
RCS file: /cvsroot/zsh/zsh/Functions/Misc/zmv,v
retrieving revision 1.8
diff -u -r1.8 zmv
--- Functions/Misc/zmv	2001/04/02 13:04:05	1.8
+++ Functions/Misc/zmv	2001/08/28 20:19:20
@@ -103,10 +103,6 @@
 #   are now turned off by default.  To force the use of glob qualifiers,
 #   give the flag -Q.
 #
-#   The second argument is re-evaluated in order to expand the parameters,
-#   so quoting may be a bit haphazard.  In particular, a double quote
-#   will need an extra level of quoting.
-#
 #   The pattern is always treated as an extendedglob pattern.  This
 #   can also be interpreted as a feature.
 #
@@ -130,7 +126,7 @@
     print -P "%N: unrecognized option: -$OPTARG" >&2
     return 1
   fi
-  eval "opt_$opt=${OPTARG:--$opt}"
+  eval "opt_$opt=${(q)OPTARG:--$opt}"
 done
 (( OPTIND > 1 )) && shift $(( OPTIND - 1 ))
 
@@ -153,6 +149,7 @@
 
 pat=$1
 repl=$2
+shift 2
 
 if [[ -z $action ]]; then
   # We can't necessarily get the name of the function directly, because
@@ -229,9 +226,9 @@
   fi
   [[ -e $f && $f = (#b)${~pat} ]] || continue
   set -- "$match[@]"
-  eval g=\"$repl\"
+  g=${(e)repl}
   if [[ -z $g ]]; then
-    errs=($errs "$f expanded to empty string")
+    errs=($errs "\`$f' expanded to an empty string")
   elif [[ $f = $g ]]; then
     # don't cause error: more useful just to skip
     #   errs=($errs "$f not altered by substitution")
@@ -255,7 +252,7 @@
 for f in $files; do
   [[ -z $to[$f] ]] && continue
   exec=($action ${=opt_o} $opt_s -- $f $to[$f])
-  [[ -n $opt_i$opt_n$opt_v ]] && print -- $exec
+  [[ -n $opt_i$opt_n$opt_v ]] && print -r -- ${(q)exec}
   if [[ -n $opt_i ]]; then
     read -q 'opt?Execute? ' || continue
   fi

-- 
Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
Work: pws@csr.com
Web: http://www.pwstephenson.fsnet.co.uk


       reply	other threads:[~2001-08-28 20:21 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1010821163843.ZM21870@candle.brasslantern.com>
2001-08-28 21:25 ` Peter Stephenson [this message]
     [not found] <1010816023151.ZM11189@candle.brasslantern.com>
2001-08-17 13:02 ` Peter Stephenson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20010828212559.367FA1427E@pwstephenson.fsnet.co.uk \
    --to=pws@pwstephenson.fsnet.co.uk \
    --cc=zsh-workers@sunsite.auc.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).