| Deutsch English Français Italiano |
|
<vbiht0$1mt5p$1@news.xmission.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder9.news.weretis.net!xmission!nnrp.xmission!.POSTED.shell.xmission.com!not-for-mail
From: gazelle@shell.xmission.com (Kenny McCormack)
Newsgroups: comp.unix.programmer
Subject: Word splitting oddities (Was: Long filenames in DOS/Windows and Unix/Linux)
Date: Sat, 7 Sep 2024 21:51:29 -0000 (UTC)
Organization: The official candy of the new Millennium
Message-ID: <vbiht0$1mt5p$1@news.xmission.com>
References: <9e7a4bd1-bfbb-4df7-af1a-27ca9625e50bn@googlegroups.com> <ygay146mot1.fsf@akutech.de> <wwvy1463tkk.fsf@LkoBDZeT.terraraq.uk> <slrnvdp692.1s5hi.candycanearter07@candydeb.host.invalid>
Injection-Date: Sat, 7 Sep 2024 21:51:29 -0000 (UTC)
Injection-Info: news.xmission.com; posting-host="shell.xmission.com:166.70.8.4";
logging-data="1799353"; mail-complaints-to="abuse@xmission.com"
X-Newsreader: trn 4.0-test77 (Sep 1, 2010)
Originator: gazelle@shell.xmission.com (Kenny McCormack)
Bytes: 2762
Lines: 60
In article <slrnvdp692.1s5hi.candycanearter07@candydeb.host.invalid>,
candycanearter07 <candycanearter07@candycanearter07.nomail.afraid> wrote:
....
>>> Only sometimes it doesn't :-)
>>>
>>> $ foo="foo bar"
>>> $ bar=$foo
>>>
>>> No problem with the space in the expanded value here!
>>>
>>> $ echo $bar
>>> foo bar
>>>
>>> but of course:
>>> ls $bar
>>> ls: cannot access 'foo': No such file or directory
>>> ls: cannot access 'bar': No such file or directory
>>
>> Fair point. Field splitting happens after parameter expansion, except
>> when it doesnt.
>
>
>Actually, echo is special since it just prints every argument it's
>given.. both of these commands are working as expected with splitting:
>
> $ echo some text
>
> some text
>
> $ ls some text
>
> ls: cannot access 'some': No such file or directory
> ls: cannot access 'text': No such file or directory
The point is still valid, even if the demonstration wasn't quite on-point.
When faced with the problem of needing to display a variable in shell, but
needing to know whether or not it is a single string or multiple strings, a
useful trick is to use "printf" like this:
$ set -- this is "a test of" something
$ printf "%s\n" "$@"
Then you would know for sure that in the example above, the variable "foo"
really did have the value "foo bar".
Note, incidentally, that in the example above, the statement: bar=$foo
pretty much has to be parsed as if $foo had been quoted, because the
alternative is much worse. The alternative would be to interpret:
bar=$foo
as
bar=foo bar
which means to run the "bar" command with the env var "bar" set to "foo".
--
Trump has normalized hate.
The media has normalized Trump.