On Wed, 2022-01-12 at 00:08 +0100, Florian Zieboll via Dng wrote:
Dear list,

this im my 'test.sh':

#!/bin/bash
for f in "$@" ; do
     xcmd="unrar x"
     $xcmd "$f"
done

Can please somebody explain, why, if I double-quote the "$xcmd"
variable in line 4, the script fails with

        ./test.sh: line 4: unrar x: command not found

???

Commands without parameters resp. whitespace (e.g. xcmd="unzip") work
fine when double-quoted; a web search (including the "GNU Bash
manual"
[1]) did not shed any light on this mystery...

Thank you and libre Grüße,
Florian


------------------------------

Message: 2
Date: Thu, 13 Jan 2022 09:07:22 -0500
From: Hendrik Boom <[email protected]>
To: [email protected]
Subject: Re: [DNG] [OT] bash / quote weirdness
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii

On Wed, Jan 12, 2022 at 05:45:08PM -0500, Steve Litt wrote:
On the other hand...

=======================================
[slitt@mydesk ~]$ cat -n /etc/fstab | cut -b 1-20 |  head -n5
      1 UUID=730eaf92
      2 UUID=41abb5fd
      3 UUID=96cfdfb3
      4 UUID=6F66-BF7
      5 tmpfs /tmp tm
[slitt@mydesk ~]$ "cat -n" /etc/fstab | cut -b 1-20 |  head -n5
bash: cat -n: command not found
[slitt@mydesk ~]$ "cat -n /etc/fstab" | cut -b 1-20 |  head -n5
bash: cat -n /etc/fstab: No such file or directory
[slitt@mydesk ~]$
So if it has parameters it's a command, and if it diesn't it's just
a file or directory?

-- hendrik


------------------------------

Message: 3
Date: Thu, 13 Jan 2022 15:43:29 +0100
From: Antony Stone <[email protected]>
To: [email protected]
Subject: Re: [DNG] [OT] bash / quote weirdness
Message-ID: <[email protected]>
Content-Type: Text/Plain;  charset="utf-8"

On Thursday 13 January 2022 at 15:07:22, Hendrik Boom wrote:

On Wed, Jan 12, 2022 at 05:45:08PM -0500, Steve Litt wrote:
[slitt@mydesk ~]$ cat -n /etc/fstab | cut -b 1-20 |  head -n5

      1 UUID=730eaf92
      2 UUID=41abb5fd
      3 UUID=96cfdfb3
      4 UUID=6F66-BF7
      5 tmpfs /tmp tm

[slitt@mydesk ~]$ "cat -n" /etc/fstab | cut -b 1-20 |  head -n5
bash: cat -n: command not found

[slitt@mydesk ~]$ "cat -n /etc/fstab" | cut -b 1-20 |  head -n5
bash: cat -n /etc/fstab: No such file or directory
So if it has parameters it's a command, and if it diesn't it's just
a file or directory?
It looks a good deal more complicated than that...

$ "cat /etc/fstab"
bash: cat /etc/fstab: No such file or directory

$ "cat fstab"
bash: cat fstab: command not found

I have no idea what's really going on here.


Antony.

The shell receives a series of tokens, and tries to interpret the first one as a command.  In the double-quoted attempt above, it gets two tokens before the first pipe | ---

    1) "cat -n"

    2) /etc/fstab

Of course, the system has no command named "cat -n".  (And only a chaotic evil person would use a space in a command's name.) Something like
    "cat"  "-n"  /etc/fstab
would work fine, the shell now sees three tokens (and the double quotes are completely unnecessary here), and the first is recognized as a command that's on the executable path.

The same goes for "cat /etc/fstab" or "cat fstab", they're both just text strings that happen to include a space character.


_______________________________________________
Dng mailing list
[email protected]
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to