Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 20 Feb 2011 19:12:46 +0100
From:      David Demelier <demelier.david@gmail.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: Backtick versus $()
Message-ID:  <4D61599E.4040008@gmail.com>
In-Reply-To: <alpine.BSF.2.00.1102201027170.56885@wonkity.com>
References:  <alpine.BSF.2.00.1102201027170.56885@wonkity.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 20/02/2011 18:40, Warren Block wrote:
> $() apparently isn't quite the same as backticks, although sh(1) doesn't
> mention that, or I just missed it. This script is just supposed to
> escape special characters* in a path/filename:
>
> #!/bin/sh
>
> DESTDIR="./"
> COMPFILE=".cshrc"
>
> PSTR=`echo "${DESTDIR}${COMPFILE}" | sed 's%\([?:.%\\]\)%\\\1%g'`
> echo ${PSTR}
>
> PSTR=$(echo "${DESTDIR}${COMPFILE}" | sed 's%\([?:.%\\]\)%\\\1%g')
>
> % ./test.sh
> \1/\1cshrc
> \./\.cshrc
>
> With backticks, the backreference \1 never seems to be replaced with the
> actual pattern, regardless of search pattern. Tested on 8-stable and
> 9-current.
>
> *: That's special characters as less(1) -Ps sees them.
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to
> "freebsd-questions-unsubscribe@freebsd.org"

I'd prefere $() rather than ``. It's more powerful, for example you can 
write a multiple $() but not `` see :

markand@Abricot ~ $ echo $(basename $(which dmesg))
dmesg

markand@Abricot ~ $ echo `basename `which dmesg``
usage: basename string [suffix]
        basename [-a] [-s suffix] string [...]
which dmesg

Of course the example code is useless but shows the limitations of ``. 
Nowadays all shells supports $() so I advise you to use it :).

Cheers,

-- 
David Demelier



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D61599E.4040008>