From: Taylor Blau <me@ttaylorr.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: Taylor Blau <me@ttaylorr.com>, Git List <git@vger.kernel.org>,
Elijah Newren <newren@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Shourya Shukla <shouryashukla.oo@gmail.com>
Subject: Re: [PATCH v2] test_cmp: diagnose incorrect arguments
Date: Tue, 11 Aug 2020 17:03:37 -0400 [thread overview]
Message-ID: <20200811210337.GA34786@syl.lan> (raw)
In-Reply-To: <CAPig+cSroWZEoOL78COmPS4rkvKLE-yCiqh6Part+5gUgVon+A@mail.gmail.com>
On Tue, Aug 11, 2020 at 03:25:03PM -0400, Eric Sunshine wrote:
> On Tue, Aug 11, 2020 at 2:33 PM Taylor Blau <me@ttaylorr.com> wrote:
> > On Sun, Aug 09, 2020 at 01:42:09PM -0400, Eric Sunshine wrote:
> > > + test "x$2" = x- || test -e "$2" || BUG "test_cmp '$2' missing"
> >
> > Not related to your patch, but I've seen this style of "x$1" in a few
> > places in test-lib-functions.sh. Why can't this be written as 'test "$1"
> > = -'?
>
> Short answer: To prevent 'test' from thinking that the argument is a switch.
Makes sense. Now I feel silly for asking :).
> Longer answer:
>
> 'test' can accept both switches (i.e. "-e") and non-switch arguments.
> Keep in mind, too, that all the quoting is stripped by the shell
> _before_ 'test' ever sees its arguments. Let's say that the caller has
> a filename whose name actually is "-e" and passes that in as $1. So,
> what does 'test' see?
>
> test -e = -
>
> Rather than comparing literal string "-e" to literal string "-", it's
> instead (almost) asking if the file named "=" exists; I say "almost"
> because it's actually an error since switch -e only accepts one
> argument, but it's being given two arguments, "=" and "-".
>
> You might say that having a file named "-e" (or similar) is unlikely,
> however, what is not unlikely is a caller passing "-" for
> standard-input as $1. In this case, 'test' sees:
>
> test - = -
>
> which may or may not be an error in a particular implementation of
> 'test'. Some implementations may understand that "-" is not a valid
> switch, thus infer that you're actually asking for an equality
> comparison between arguments, but other implementations may complain
> either that there is no switch named "-" or that those arguments
> simply make no sense.
>
> This is why it's a very common idiom in shell programming with 'test'
> to see "x" prepended, thus ensuring that the argument can't be
> confused with a switch.
Thanks for a careful and helpful explanation, as always :-). Makes sense
to me.
Thanks,
Taylor
next prev parent reply other threads:[~2020-08-11 21:03 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-09 6:08 [PATCH] test_cmp: diagnose incorrect arguments Eric Sunshine
2020-08-09 8:32 ` Shourya Shukla
2020-08-09 8:49 ` Eric Sunshine
2020-08-09 17:42 ` [PATCH v2] " Eric Sunshine
2020-08-09 19:12 ` Junio C Hamano
2020-08-09 19:34 ` Eric Sunshine
2020-08-10 15:22 ` Junio C Hamano
2020-08-11 18:32 ` Taylor Blau
2020-08-11 19:25 ` Eric Sunshine
2020-08-11 21:03 ` Taylor Blau [this message]
2020-08-12 15:37 ` Jeff King
2020-08-12 16:15 ` Eric Sunshine
2020-08-12 16:39 ` Eric Sunshine
2020-08-12 17:10 ` Jeff King
2020-10-16 0:17 ` Jeff King
2020-10-16 2:18 ` Eric Sunshine
2020-10-16 18:36 ` Junio C Hamano
2020-10-16 20:56 ` Junio C Hamano
2020-10-16 23:14 ` Junio C Hamano
2020-10-17 6:06 ` Eric Sunshine
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=20200811210337.GA34786@syl.lan \
--to=me@ttaylorr.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=shouryashukla.oo@gmail.com \
--cc=sunshine@sunshineco.com \
/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.
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).