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